#include <iostream>
using namespace std;
// 归并排序(迭代 模板函数)
template<typename T>
void merge_sort(T arr[], int len)
{
T* a = arr;
T* b = new T[len];
// seg:步长 每次循环增加一倍 1 2 4 8 16,直到超过数组长度
for(int seg = 1; seg < len; seg += seg)
{
// 比较 2*seg 个数的区间,再后移2*seg个数再比较,以此类推,直到超过数组长度
for(int start = 0; start < len; start += 2*seg)
{
// 一区间开始
int low = start;
// 一区间结束/二区间开始
int mid = min(start + seg, len);
// 二区间结束
int high = min(start + 2*seg, len);
// 合并数组的开始下标
int k = start;
// start1 <= 一区间 < end1(start2)
int start1 = low, end1 = mid;
// start2 <= 二区间 < end2
int start2 = mid, end2 = high;
// 一区间和二区间进行比较,谁小谁去合并数组,该区间下标+1,直到某一区间比较完毕
while(start1 < end1 && start2 < end2)
归并排序(C++迭代实现,解释菜鸟教程的代码)
最新推荐文章于 2023-01-31 16:02:43 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)