归并排序
归并排序
归并排序就是将两个或两个以上的有序列表合并成一个有序表的过程。最简单常见的是2路排序。思想:
假设初始序列含有n个记录, 则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为2或1的有序子序列,反复两两归并,直到得到长度为n的有序序列为止。
public static void merge(int[] r, int[] t, int low, int mid, int high) {
int i = low, j = mid + 1, k = low;
while(i <= mid && j <= high) { //将r中记录从小到大并入t中
if(r[i] <= r[j])
t[k++] = r[i++];
else
t[k++] = r[j++];
}
while(i <= mid) t[k++] = r[i++];
while(j <= high) t[k++] = r[j++];
}
private static void mergerSort(int[] array, int start, int mid, int end) {
int[] arr = new int[end + 1];
int low = start;
int left = start;
int center = mid + 1;
while(start <= mid && center <= end) {
arr[low++] = array[start] > array[center] ? array[center++] : array[start++];
}
while(start <= mid) {
arr[low++] = array[start++];
}
while(center <= end) {
arr[low++] = array[center++];
}
for(int i = left; i <= end; i++) {
array[i] = arr[i];
}
}
private static void sort(int[] array, int start, int end) {
if(start >= end) {
return;
}
int mid = (end - start)/2 + start;
sort(array, start, mid);
sort(array, mid + 1, end);
mergerSort(array, start, mid, end);
}
- 总结
不是太会。。有待理解