public class Sort_MergeSort {
/**
* 时间复杂度O(N*logN),额外空间复杂度O(N)
* @param arr
*/
public void mergeSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
sortProcess(arr, 0, arr.length-1);
}
public void sortProcess(int[] arr, int L, int R) {
if (L == R) {
return;
}
int mid = L + ((R-L) >> 1);
sortProcess(arr, L, mid);
sortProcess(arr, mid+1, R);
merge(arr, L, mid, R);
}
public void merge(int[] arr, int L, int mid, int R) {
int[] temp = new int[R-L+1];
int i = 0;
int p1 = L;
int p2 = mid + 1;
while (p1 <= mid && p2 <= R) {
temp[i++] = arr[p1] < arr[p2] ? arr[p1++] : arr[p2++];
}
while (p1 <= mid) {
temp[i++] = arr[p1++];
}
while (p2 <= R) {
temp[i++] = arr[p2++];
}
for (i=0; i<temp.length; i++) {
arr[L+i] = temp[i];
}
}
}
归并排序算法
最新推荐文章于 2024-07-24 20:44:05 发布