思路就是份治,将左边排好序,右边排好序进行merge操作,递归处理
class Solution {
public:
void merge(vector<int>& arr, int low, int mid, int high) {
int i = low, j = mid + 1, p = 0;
vector<int> help(high-low+1, 0);
while (i <= mid && j <= high) {
help[p++] = arr[i] <= arr[j]? arr[i++] : arr[j++];
}
while (i <= mid) help[p++] = arr[i++];
while (j <= high) help[p++] = arr[j++];
for(i = low, j = 0; i <= high; i++,j++) {
arr[i] = help[j];
}
}
void mergeSort(vector<int>& arr, int low, int high) {
if (low < high) {
int mid = low + ((high - low) >> 1);
mergeSort(arr, low, mid);
mergeSort(arr, mid + 1, high);
merge(arr, low, mid, high);
}
}
vector<int> MySort(vector<int>& arr) {
mergeSort(arr, 0, arr.size() - 1);
return arr;
}
};