- 基本概念
试想一个操作,将一个数组(默认为无序)切割成两段,然后分别进行排序,然后将结果结合在进行排序归并。在数据结构之中这是一种简单的递归归并排序算法,是应用高效算法设计中分治思想的典型例子。
归并排序的基本逻辑是,要对数组[min,max]进行排序,先把他分成[min,mid]和[mid + 1, max]两个数组,分别进行排序最后归并起来。
- 代码实现
接下来我将用java语言完成代码的描述。
public class MergeSort {
private static int[] temp;//初始化一个归并所需的辅助数组
public static void mergeSort(int[] arr) {
temp = new int[arr.length];//把数组的长度变为要排序数组的长度
mergeSort(arr,0,arr.length - 1);//调用方法
}
public static void mergeSort(int[] arr, int min, int max) {
if(min >= max) {//当数组长度为1时退出方法
return;
}
int mid = min + (max - min)/2;
mergeSort(arr,min,mid);//通过递归排序两段
mergeSort(arr,mid + 1, max);//通过递归排序两段
merge(arr,min,mid,max);
}
public static void merge(int[]arr,int min,int mid,int max) {//两个有序数组归并方法
int i = min;
int j = mid + 1;
for(int x = 0;x < arr.length; x++) {
temp[x] = arr[x];
}
}
for(int x = min; x <= max; x++) {
if(i > mid) {
arr[x] = temp[j++];
}else if(j > max) {
arr[x] = temp[i++];
}else if(temp[j] < temp[i]) {
arr[x] = temp[j++];
}else {
arr[x] = temp[i++];
}
}