数据结构之归并排序(迭代实现)

#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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值