#include<iostream>
#include<cstdlib>
using namespace std;
#define MAXSIZE 20
typedef int ElemType;
typedef struct{
ElemType r[MAXSIZE + 1];//Array[0]置哨
int length;
}SqList;
void Merge(ElemType S[], ElemType T[], int i, int m, int n)//归并基程序
{//对S[i...m]和T[m+1...n]这两个有序表归并成一个有序表
int j = m + 1, k = i;
while (i <= m&&j <= n)
{
if (S[i] <= S[j]) T[k++] = S[i++];
else T[k++] = S[j++];
}
if (i <= m)
while (k <= n&&i <= m) T[k++] = S[i++];//k<=n一定成立,所有可有可无
if (j <= n)
while (k <= n&&j <= n) T[k++] = S[j++];//k<=n一定成立,所有可有可无
}
void MergePass(ElemType S[], ElemType T[], int h, int n)
{
int i;
for (i = 1; i + 2 * h - 1 <= n; i = i + 2 * h) //归并h长的两相邻子表
Merge(S, T, i, i+h-1, i+2*h-1);
if (i + h - 1 <= n) //余下部分
Merge(S, T, i, i+h-1, n);
}
void MergeSort(SqList &L) //自底向上的二路归并算法
{
ElemType T[20];
int h,i;
for (h = 1; h<L.length; h = 2 * h)
{
MergePass(L.r, T, h, L.length);
for (i = 1; i <= L.length; ++i)
L.r[i] = T[i];
}
}
int main(void)
{
SqList L; int i;
cout << "The length of LIST :"; cin >> L.length;
cout << "enter nodes:" << endl;
for (i = 1; i <= L.length; i++)
cin >> L.r[i];
for (i = 1; i <= L.length; i++)
cout << L.r[i] << " ";
cout << endl;
MergeSort(L);
for (i = 1; i <= L.length; i++)
cout << L.r[i] << " ";
cout << endl;
return(0);
}
数据结构之归并排序(迭代实现)
最新推荐文章于 2022-08-17 02:10:00 发布