C++归并排序
算法概述: 归并排序是将有序的两个数组进行排序,即将待排序的一个数组不断进行递归,直到递归成两个都只含有一个元素的数组,则对这两个之含有一个元素的数组进行排序,不断回溯,直到回溯到可以将待排序数组分成两个有序数组,之后对其进行最后一次有序数组排序,最后两个有序数组合并为一个有序数组,就得到了需要进行排序的数组,可以从小到大进行排序,也可以从大到小进行排序。
代码:
void mergeSort(vector<int>& nums, vector<int>& path, int left, int right)
{
if(left >= right){
return;
}
int mid = (left + right) / 2;
mergeSort(nums, path, left, mid);
mergeSort(nums, path, mid + 1, right);
int l = left;
int r = mid + 1;
for(int ix = left; ix <= right; ++ix)
{
path[ix] = nums[ix];
}
for(int ix = left; ix <= right; ++ix){
if(ix == mid + 1){
nums[ix] = path[ix];
}else if(ix == right + 1 || path[left] <= path[right]){
nums[ix] = path[left++];
}else{
nums[ix] = path[right++];
}
}
}
时间复杂度:O(nlog n); 空间复杂度:O(n);
|