何为手摇算法
空间复杂度降低,但是时间复杂度会提高,实际中不适用~ 了解即可
public static void mergeSort(int[] a){
sort(a, 0, a.length - 1);
}
public static void sort(int[] a, int left, int right){
if(left < right){
int mid = (left + right) / 2;
sort(a, left, mid);
sort(a, mid+1, right);
merge(a, left, mid, right);
}
}
public static void merge(int[] a, int left, int mid, int right) {
int i = left;
int j = mid + 1;
while(i < j && j <= right){
while(i < j && a[i] <= a[j]) i++;
int index = j;
while(j <= right && a[j] < a[i]) j++;
Convert(a, i, index - 1, j - 1);
i += j - index;
}
}
public static void Convert(int[] a, int left, int mid, int right) {
Reverse(a, left, mid);
Reverse(a, mid+1, right);
Reverse(a, left, right);
}
public static void Reverse(int[] a, int left, int right) {
for(; left < right; left++, right--)
swap(a, left, right);
}