package test;
/**
*
* @author lizongbao
*
*/
public class pack {
/**
*
* @param args
*/
public static void main(String[] args) {
int[] array = { 4, 3, 6, 5, 9, 0, 8, 1, 7, 2 };
// merge(array, 0, mid, array.length-1);
System.out.println(args.length);
System.out.println(args);
sortCore(array);
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
/**
*
* @param array
*/
private static void sortCore(int[] array) {
//边界条件新检验
if(array==null||array.length==0){
return;
}
int length = array.length;
int groupSize = 1;
while (groupSize < length) {
for (int i = 0; i < length; i += (groupSize * 2)) {
int low = i;
int hight = Math.min(i + groupSize * 2 - 1, length - 1);
int middle = low + groupSize - 1;
merge(array, low, middle >= hight ? (low + hight) / 2 : middle, hight);
}
groupSize *= 2;
}·
// 对分组中的奇数情况进行另外处理
// if (groupSize / 2 < length) {
// int low = 0;
// int hight = length - 1;
// merge(array, low, groupSize / 2 - 1, hight);
// }
}
/**
*
* @param array
* @param low
* @param mid
* @param hight
*/
private static void merge(int[] array, int low, int mid, int hight) {
if (low >= hight) {
return;
}
int[] auxArray = new int[hight - low + 1];
int index1 = low;
int index2 = mid + 1;
int i = 0;
while (index1 <= mid && index2 <= hight) {
if (array[index1] <= array[index2]) {
auxArray[i] = array[index1];
index1++;
i++;
} else {
auxArray[i] = array[index2];
index2++;
i++;
}
}
// 继续合并前半段数组中未被合并的部分
while (index1 <= mid) {
auxArray[i] = array[index1];
index1++;
i++;
}
// 继续合并后半段数组中未被合并的部分
while (index2 <= hight) {
auxArray[i] = array[index2];
index2++;
i++;
}
// 将合并好的序列写回到数组中
for (int j = 0; j < auxArray.length; j++) {
array[low + j] = auxArray[j];
}
}
}