归并排序(java)

本文详细介绍了归并排序的基本原理,包括递归和迭代两种方法。首先,通过合并两个有序子序列的示例展示了基础操作。接着,探讨了递归归并排序的思路,如何将序列拆分、排序并合并。最后,介绍了迭代归并排序,通过逐步合并子序列直至整个序列有序。适合理解排序算法的进阶学习者。
摘要由CSDN通过智能技术生成

归并排序

归并排序就是将两个有序序列合并成为一个有序序列。因此,将两个有序子序列合并成一个有序序列是归并排序的基础算法。
两个有序子序列合并

void Merge(int a[],int b[],int l,int m,int h){
	int i,j,k;
	int i=1;j=m+1;k=1;
	while(i<=m&&j<=h){
		if(a[i]<a[j]){b[k]=a[i];i++;k++;}
		else{b[k]=a[j];j++;k++;}
		}
	while(i<=m){b[k++]=a[i++];}
	while(j<=h){b[k++]=a[j++];}
	}

**递归归并排序:**将无序序列S[s:t]分成等长的两部分,S[s:m]、S[m+1,t]。(m=(s+t)/2)对这两个序列分别进行归并排序,然后将其排序结果进行有序合并。由于两个部分仍然可能是无序的,所以此过程要递归执行,直到每个子序列只有一个元素为止,然后再进行无序操作。

void Msort(int S[],int T[],int s,int t){
	int R[t-s+1];
	if (s==t){T[s]=S[s];}
	else{
		m=(s+t)/2;
		Msort(S,R,s,m);
		Msort(S,R,m+1,t);
		Merge(R,T,s,m,t;)
		}
	}

**迭代归并排序:**对于长度为n的待排序线性表,将其看为n个长度为1的有序子表,然后将相邻的有序子表两两合并,得到n/2个长度为2或1的有序子表,接着依次两两合并直到合并成一个表。

void Msort(int R[],int T[],int n){
	int len=1;
	while(len<n){
		Msort(R,T,n,len);
		len*=2;
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值