归并排序
时间复杂度: O(NlogN)
空间复杂度: 对于数组来说, O(N)
稳定性: 稳定排序
/**
* 1.拆分
* 2.归并
*/
public class MergeSort {
public static void mergeSort(int arr[], int low, int high){
if(low < high){
int mid = (low + high) / 2;
mergeSort(arr, low, mid);
mergeSort(arr, mid + 1, high);
merge(arr, low, mid, high);
}
}
/**
* 归并
* @param arr
* @param low
* @param mid
* @param high
*/
private static void merge(int[] arr, int low, int mid, int high) {
int[] pro = new int[high - low + 1];
int i = low;
int j = mid + 1;
int proIndex = 0;
while(i <= mid && j <= high){
if(arr[i] < arr[j]){
pro[proIndex++] = arr[i++];
}
else {
pro[proIndex++] = arr[j++];
}
}
while(i <= mid){
pro[proIndex++] = arr[i++];
}
while(j <= high){
pro[proIndex++] = arr[j++];
}
for(int k = 0; k < proIndex; k++){
arr[k+low] = pro[k];
}
}
public static void main(String[] args) {
int arr[] = {1, 9, 2, 2, 4, 11, 23, 45, 6};
int high = arr.length - 1;
mergeSort(arr, 0, high);
for (int i:
arr) {
System.out.print(i + " ");
}
}
}
