每日一题:归并排序
排序步骤
- 分解(Divide):将n个元素分成含n/2个元素的子序列。
- 解决(Conquer):用合并排序法对两个子序列递归排序。
- 合并(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
0
二维码
打赏
海报
每日一题:归并排序
排序步骤
分解(Divide):将n个元素分成含n/2个元素的子序列。
解决(Conquer):用合并排序法对两个子序列递归排序。
合并(Combine):合并两个已排序的子……
共有 0 条评论