归并排序
思路:
- 具体流程
- 动图详解
- Java算法代码
package com.gh.check01;
public class _04_排序之归并排序 {
private static int[] helper;
public static void main(String[] args) {
int[] arr = {2,5,3,1,6,4,7,4,0};
sort(arr);
for(int i=0; i<arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
public static void sort(int[]arr) {
helper = new int[arr.length];
sort(arr, 0, arr.length-1);
}
public static void sort(int[]arr, int p, int r) {
if(p<r) {
int mid = p + ((r-p)>>1);
sort(arr, p, mid);
sort(arr, mid+1, r);
merge(arr, p,mid, r);
}
}
public static void merge(int[]arr, int p, int mid,int r) {
for(int i=0; i<arr.length; i++) {
helper[i] = arr[i];
}
int left = p, right = mid+1;
int current = p;
while(left<=mid && right<=r) {
if(helper[left] <= helper[right]) {
arr[current++] = helper[left++];
}else {
arr[current++] = helper[right++];
}
}
while(left<=mid) {
arr[current++]=helper[left++];
}
}
}