数据结构与算法之归并排序
- 基本介绍
归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 - 排序示意图

再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后一次合并,要将[4,5,7,8]和[1,2,3,6]两个已经有序的子序列,合并为最终序列[1,2,3,4,5,6,7,8],来看下实现步骤

- 代码实现
package com.datastrucate.sort;
import java.util.Arrays;
public class MergeSort {
public static void main(String[] args) {
int [] arr = new int [] {23,45,2,5,78,9,10,3};
System.out.println("未排序数组为:");
System.out.println(Arrays.toString(arr));
System.out.println("排序后数组为:");
mergeSort(arr, 0 , arr.length-1);
System.out.println(Arrays.toString(arr));
}
private static void mergeSort(int[] arr, int low, int high) {
int mid = (high + low)/2;
if(low < high) {
mergeSort(arr, low, mid);
mergeSort(arr, mid + 1, high);
merge(arr, low, mid, high);
}
}
private static void merge(int [] arr,int low,int mid,int high) {
int [] temp = new int [high - low + 1];
int i = low;
int j = mid +1;
int index = 0;
while (i <= mid && j <= high) {
if (arr[i] <= arr[j]) {
temp[index++] = arr[i++];
} else {
temp[index++] = arr[j++];
}
}
while (i <= mid) {
temp[index++] = arr[i++];
}
while (j <= high) {
temp[index++] = arr[j++];
}
for (int k = 0; k < temp.length; k++) {
arr[k + low] = temp[k];
}
}
}