您的位置:首页 > 其它

排序-归并排序(非递归版本)

2016-04-11 18:05 435 查看
归并排序-非递归版

非递归版的归并比递归版的归并效率要高,因为少了函数的递归调用所需要的时间, 这里概念就不多说了

直接给大家代码吧,大家对照书上的概念仔细调试即可,本人参考的是大话数据结构一书

Code:

#include

//合并
void MergePass(int SR[], int TR[], int s, int n)
{
int i = 0;//数组从0开始
int j = 0;

while (i <= n - 2 * s - 1)
{
Merge(SR, TR, i, i + s - 1, i + 2 * s - 1);
i = i + 2 * s;//加上增量
}

if (i < n - s + 1)
{
Merge(SR, TR, i, i + s - 1, n);
}
else
{
for (j = i; j <= n; j++)
{
TR[j] = SR[j];
}
}
}

//非递归归并
void MergerSort_2(int* L, int length)
{
int* TR = (int*)malloc(sizeof(int) * length);
int k = 1;

while (k < length)
{
MergePass(L, TR, k, length);
k = 2 * k;
MergePass(TR, L, k, length);
k = 2 * k;
}
}

void MergerSort(int* L, int length)
{
MergerSort_2(L, length - 1);//数组最后一个元素不存在
}

//main测试
int main(void)
{
int x[10] = { 50, 10, 90, 30, 70, 40, 80, 60, 20, 100 };

MergerSort(x, 10);//sort

system("pause");
return 0;
}

欢迎指正
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: