/**
* Copyright (C), 2018-2019, LMaWC
* FileName: Application
* Author: neo
* Date: 2019/3/20 19:35
* Description:
* History:
* <author> <time> <version> <desc>
* 作者姓名 修改时间 版本号 描述
*/
package com.test;
import com.sun.jndi.cosnaming.CNCtx;
import org.omg.CORBA.ARG_IN;
import sun.security.util.Length;
import javax.swing.text.Highlighter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* 〈一句话功能简述〉<br>
* 〈〉
*
* @author neo
* @create 2019/3/20
* @since 1.0.0
*/
public class Application {
private static void mergeSort(int[] a,int[] tmpArray,int left,int right){
if(left<right){
// 分成两个数组进行排序
int center = (left+right)/2;
mergeSort(a,tmpArray,left,center);
mergeSort(a,tmpArray,center+1,right);
// 将两个数组进行合并
merge(a,tmpArray,left,center+1,right);
}
}
public static void mergeSort(int[] a){
int[] tmpArray = new int[a.length];
mergeSort(a,tmpArray,0,a.length-1);
}
private static void merge(int[] a,int[] tmpArray,int lefPos,int rightPos,int rightEnd){
int leftEnd = rightPos-1;
int tmpPos = lefPos;
int numElements = rightEnd-lefPos+1;
// Main loop
while (lefPos<=leftEnd&&rightPos<=rightEnd){
// 把比较的数据全都放到tmp数组里
if(a[lefPos]<=a[rightPos]){
tmpArray[tmpPos++] = a[lefPos++];
}else {
tmpArray[tmpPos++] = a[rightPos++];
}
}
while (lefPos<=leftEnd){
tmpArray[tmpPos++] = a[lefPos++];
}
while (rightPos<=rightEnd){
tmpArray[tmpPos++] = a[rightPos++];
}
// copy tmpArray back
for(int i = 0;i< numElements;i++,rightEnd--){
a[rightEnd] = tmpArray[rightEnd];
}
}
public static void main(String[] args) {
int[] nums={11,1,6,1,6,7,1,7,12};
mergeSort(nums);
for(int i = 0;i<nums.length;i++){
System.out.println(nums[i]);
}
}
}