归并排序是利用递归与分治思想将数据序列划分成越来越小的半子序列,在对其进行排序,最后利用递归将排好序的半子序列合并成越来越大的有序序列。
归并排序中,归 即是递归的意思,即递归的将数组这般的分离为单个数组,例如:{ 9, 2, 4, 1, 5, 3, 8 }
归并排序算法的原理:
对于给定的数组序列,首先将每两个相邻的长度为1的子序列进行归并,得到n/2(向上取整)个长度为 2 或 1 的有序子序列,再将其两两归并,反复执行此过程。
代码示例:
public class MergeSort {
public static void sort(int[] arr, int low, int high) {
if(low >= high)
return;
int mid = (low + high) / 2;
sort(arr, low, mid);
sort(arr, mid+1, high);
merge(arr, low, mid, high);
}
public static void merge(int[] arr, int low, int mid, int high) {
int p1 = low;
int p2 = mid;
int[] temp = new int[ high-low+1 ];
int i=0;
while(p1 <=mid && p2 <= high){
temp[i++] = arr[p1] > arr[p2] ? arr[p2++] : arr[p1++];
}
while(p1 <= mid) {
temp[i++] = arr[p1++];
}
while(p2 <= high) {
temp[i++] = arr[p2++];
}
for(i=0;i<temp.length;i++) {
arr[low+i] = temp[i];
}
}
public static void main(String[] args) {
int[] arr = new int[] { 9, 2, 4, 1, 5, 3, 8 };
sort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
}