import java.util.Arrays;
public class MergeSort {
private final static int MAX_VALUE = 1000;
private final static int LENGTH = 100000;
public static void main(String[] args) {
int[] A = new int[LENGTH];
//产生随机序列
randomIntArray(A);
//归并排序
long start = System.currentTimeMillis();
mergeSort(A, 0, A.length);
long end = System.currentTimeMillis();
long merge = end - start;
System.out.println(Arrays.toString(A) + "\nmerge time:" + merge);
}
private static void randomIntArray(int[] array) {
if(array == null) return;
for(int i = 0; i < array.length; i++) {
array[i] = (int) (Math.random() * MAX_VALUE);
}
}
/*归并排序*/
public static void mergeSort(int[] A, int start, int len) {
if(len <= 1) return;
int half = len / 2;
mergeSort(A, start, half);
mergeSort(A, start + half, len - half);
merge(A, start, start + half, start + len);
}
/*归并*/
public static void merge(int[] A, int start, int mid, int end) {
int[] temp = new int[end - start];
int i = start, j = mid, k = 0;
while (i < mid && j < end) {
if(A[i] < A[j]) {
temp[k] = A[i];
i++;
} else {
temp[k] = A[j];
j++;
}
k++;
}
if(i < mid)
System.arraycopy(A, i, temp, k, mid - i);
if(j < end)
System.arraycopy(A, j, temp, k, end - j);
System.arraycopy(temp, 0, A, start, temp.length);
}
}
算法导论-归并排序
最新推荐文章于 2022-07-24 17:20:57 发布