当前位置: 代码迷 >> 综合 >> C++ 二路归并排序-递归实现
  详细解决方案

C++ 二路归并排序-递归实现

热度:67   发布时间:2024-02-11 22:59:40.0

核心思想:先递归划分,然后合并的时候相当于合并两个有序数组,需要用到一个额外数组,最后把额外数组的元素依次赋给原数组,注意函数参数为引用

    //统一接口void Merge_sort(vector<int> &num, int n){vector<int> temp(n);Msort(num, temp, 0, n-1);}//递归划分void Msort(vector<int> &num, vector<int> temp, int l, int rightend){int center;if(l < rightend){center = l + (rightend - l) / 2;Msort(num, temp, l, center);Msort(num, temp, center+1, rightend);Merge(num, temp, l, center+1, rightend);}}//合并,相当于两个有序数组并列在一排第一个数组从l开始,到r-1结束,第二个数组从r开始,到rightend结束void Merge(vector<int> &num, vector<int> temp, int l, int r, int rightend){int leftend = r - 1;int index = l;//存放数组Temp初始位置int n = rightend - l + 1;//数组长度while(l <= leftend && r <= rightend){if(num[l] <= num[r]) temp[index++] = num[l++];else  temp[index++] = num[r++];}while(l <= leftend)temp[index++] = num[l++];while(r <= rightend)temp[index++] = num[r++];for(int i = 0; i < n; ++i, --rightend)num[rightend] = temp[rightend];}

 

  相关解决方案