每日一题:归并排序

排序步骤

  1. 分解(Divide):将n个元素分成含n/2个元素的子序列。
  2. 解决(Conquer):用合并排序法对两个子序列递归排序。
  3. 合并(Combine):合并两个已排序的子序列已得到排序结果

参考代码

template<typename T>
void merge_sort_recursive(T arr[], T reg[], int start, int end) {
    if (start >= end)
        return;
    int len = end - start, mid = (len >> 1) + start;
    int start1 = start, end1 = mid;
    int start2 = mid + 1, end2 = end;
    merge_sort_recursive(arr, reg, start1, end1);
    merge_sort_recursive(arr, reg, start2, end2);
    int k = start;
    while (start1 <= end1 && start2 <= end2)
        reg[k++] = arr[start1] < arr[start2] ? arr[start1++] : arr[start2++];
    while (start1 <= end1)
        reg[k++] = arr[start1++];
    while (start2 <= end2)
        reg[k++] = arr[start2++];
    for (k = start; k <= end; k++)
        arr[k] = reg[k];
}

// merge_sort
template<typename T>
void merge_sort(T arr[], const int len) {
    T reg[len];
    merge_sort_recursive(arr, reg, 0, len - 1);
}
扫描关注程序区
THE END
分享
二维码
打赏
海报
每日一题:归并排序
排序步骤 分解(Divide):将n个元素分成含n/2个元素的子序列。 解决(Conquer):用合并排序法对两个子序列递归排序。 合并(Combine):合并两个已排序的子……
<<上一篇
下一篇>>