合并排序(归并排序)

本文介绍了合并排序(归并排序)的基本原理和操作过程,这是一种使用分治策略的排序算法。首先将数列分解为小的子序列,然后对每个子序列进行排序,最后通过合并有序子序列得到最终的有序序列。文中还提供了递归形式的合并排序算法实现,并提及了STL中的merge函数用于合并两个有序序列。
摘要由CSDN通过智能技术生成

在数列排序中,如果只有一个数,那么其本身就是有序的;如果只有两个数,那么一次比较就可以完成排序。可以看出来,数越少,排序越容易。那么,如果有一个由大量数据组成的数列,就很难快速的完成排序。这时就可以考虑将其分解成很小的数列,直到最后只剩一个数为止,这时其本身就是有序的,再把这些有序的数列合并在一起,执行一个和分解相反的过程,从而完成整个数列的排序。

合并排序就是采用分治的策略,将一个大的问题分成很多小的问题,先解决小问题,再通过小问题解决大问题。由于排序问题给定的是一个无序的序列,可以把待排列元素分解成两个规模大致相等的子序列,如果不易解决,再将得到的子序列继续分解,直到子序列中包含的元素个数为1,此时便可以进行合并,从而得到一个完整的有序序列。

大致过程:
(1)将待排列元素分为大小 大致相同的两个子序列
(2)对两个子序列进行合并排列
(3)将排好序的有序子序列进行合并,得到最终的有序序列

合并方法:
设置3个工作指针i,j,k(整数型)和一个辅助数组b[]。其中,i和j分别指向两个待排序子序列中当前待比较的元素,k指向辅助数组b[]中带放置元素的位置。比较a[i]和a[j],将较小的赋值给b[k],同时相应指针向后移动。如此反复,直到所有元素处理完毕。最后把辅助数组B中排好序的元素复制到数组a中。

void merge(int a[],int low,int mid,int high)
{
   
  int *b=new int[high-low+1];  //申请一个辅助数组
  int i=low,j=mid+1,k=0;
  while(i<=mid&&j<=high)   //按从小到大存放到辅助数组b[]中
  {
   
    if(a[i]<=a[j])
     b[k++]=a[i++];
    else
     b[k++]=a[j++]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值