O
问题
解决方案
代码
class Solution {
public:
vector<int> MySort(vector<int>& arr) {
MergeSort(arr,0,arr.size()-1);
return arr;
}
void MergeSort(vector<int>& arr,int left, int right){
if(left>=right) return ;
int mid = (right+left)/2;
MergeSort(arr, left, mid);
MergeSort(arr, mid+1, right);
merge(arr,left,mid,right);
}
void merge(vector<int>& arr,int left,int mid,int right){
vector<int> tmp(right-left+1);
int i = left , j = mid+1,k=0;
while(i <= mid&&j <= right){
if(arr[i]>arr[j]){
tmp[k++] = arr[j++];
}
else{
tmp[k++] = arr[i++];
}
}
while(i <= mid) tmp[k++] = arr[i++];
while(j <= right) tmp[k++] = arr[j++];
for(int c = left, d = 0;c <= right;c++){
arr[c] = tmp[d++];
}
}
};
总结与反思
- 注意递归问题。