如何用链表实现二路归并排序

来源:百度知道 编辑:UC知道 时间:2024/05/25 08:26:40
要完整的c/c++程序
要求:键盘输入数据,显示排序结果,数据用链表形式存储。

完整的c++程序,这样也太没意思了,
人家还要帮你写,帮你输入,还要测试。
告诉你一个思路就可以了,
定义两个指针:
p和q,每个指针指向一路链表,
每次比较p或q,小于或大于的,就加入到第三个链表中
被加入的一路链表的指针向后移,
一直到某一路链表到了末端,再将另一路的链表全部加入到
新链表的末尾。。

void unite (int* a, int numA, int* b, int numB, int* c, int numC)
{
int i = 0, j = 0, k = 0; //各自的循环因子,互不干扰
for (; i < numA && j < numB; k++)
{
if (a[i] < b[j])
{
c[k] = a[i];
i++;
}
else
{
c[k] = b[j];
j++;
}
}
if (i < numA)
for (; i < numA; k++, i++)
c[k] = a[i];
else
for (; j < numB; k++, j++)
c[k] = a[j];
}

//这是有序数组的合并......呵呵...