public class MergeSort {
public void sort(int[] array, int start, int end, int[] tmp) {
if (start < end) {
int mid = (start + end) / 2;
sort(array, start, mid, tmp);
sort(array, mid+1, end, tmp);
merge(array, start, mid, end, tmp);
}
}
public void merge(int[] array, int start, int mid, int end, int[] tmp) {
int i = start, j = mid + 1;
int k = 0;
while (i <= mid && j <= end) {
if (array[i] < array[j]) {
tmp[k++] = array[i++];
} else {
tmp[k++] = array[j++];
}
}
while (i <= mid) {
tmp[k++] = array[i++];
}
while (j <= end) {
tmp[k++] = array[j++];
}
//复制数组
for (i = 0; i < k; i++) {
array[start+i] = tmp[i];
}
}
public static void main(String[] args){
int[] array = new int[]{50,10,90,30,70,40,80,60,20};
int[] temp = new int[array.length];
new MergeSort().sort(array, 0, array.length-1, temp);
for(int i = 0; i < array.length; i++){
System.out.print(array[i] + " ");
}
}
}
经典排序算法:归并排序(Merging Sort)
最新推荐文章于 2022-08-09 19:40:57 发布