排序算法-----归并排序(及小改进)

 /*排序算法----归并排序(常见版)*/
 //算法思想:用一个等大备用空间做辅助,将左边部分与右边部分遍历比较大小,小的填进原数组,不管哪边剩下来的直接填进原数组 
#include<iostream>
using namespace std;
template<typename T>
/*泛型编程改进;注意这句话要写在函数的前面*/ 
 void mergesort(T a[],int left,int mid,int right)
{
    
	int k=0;
	int i,j,s;
	int b[10]={
   0};
	for(s=left;s<=right;s++)
		b[s]=a[s];//b[]数组表面是一个与a[]相同的数组,其实质b[]数组就是被分成了l---m,m---r两段
	for(i=left,j=mid+1,k=left;i<=mid&&j<=right;k++)
	{
   
		if(b[i]<=b[j]) a[k]=b[i++];
		else a[k]=b[j++];
	}
	/*按照正常情况,这里的for循环做完后,一定会有一侧的顺序已将排列好*/
	while(i<=mid)a[k++]=b[i++];
	//考虑等于是因为相等是时,i刚好遍历到最后一个数停下了 
    /*这里的等于符号考虑是为了保证某一侧出现有两个相等的数据排在后面的*/ 
	//发现第一个表的里面存在没有检索完毕的,只需将第一个表中的剩元素全部装进a[]中即可
	while(j<=right)a[k++]=b[j++];
	/*这里的等于符号考虑是为了保证某一侧出现有两个相等的数据排在后面的*/ 
	//发现第二个表的里面存在没有检索完毕的,只需将第二个表中的剩元素全部装进a[]中即可
}
template<typename T>
void  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值