归并排序详解

一、定义

    归并的含义是将两个或两个以上的有序表组合成一个有序表。无论是顺序存储还是链式存储都可以在O(m + n)的时间量级上实现。
    2-路归并排序的核心操作是将一维数组中前后两个相邻的有序序列归并为一个有序序列。
在这里插入图片描述

二、实现

//归并排序-递归实现
void merge(ElementType SR[],ElementType TR[],int s,int m,int n){

	int i,j,k;
	for(k = i = s,j = m + 1; i <= m && j <= n;k++){
		if(SR[i] <= SR[j]){
		    TR[k] = SR[i++];
		}else{
		    TR[k] = SR[j++];
		}
	}
	while(i <= m){
	    TR[k++] = SR[i++];
	}
	while(j <= n){
	    TR[k++] = SR[j++];
	}
	for(i = s; i <= n ; i++){ //保存归并后的结果
	    SR[i] = TR[i];
	}
}
void mSort(ElementType  SR[],ElementType TR[],int s,int t){

	if(s == t) TR[s] = SR[s];
	else{
		int m = (s + t) / 2;
		mSort(SR,TR,s,m);
		mSort(SR,TR,m + 1, t);
		merge(SR,TR,s,m,t);
	}
}
void mergeSort(ElementType SR[],int n){

	if(n <= 1) return;
	ElementType *TR = new ElementType[n];//n个辅助空间
	memset(TR,0,n); 

	mSort(SR,TR,0,n - 1);

	delete[] TR;
	TR = nullptr;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值