归并排序(递归详解)

归并排序:十大排序算法之一,才用的是分而治之的方法。

简单来说就是(百度百科):

其主要算法操作可以分为以下步骤:

Step 1:将n个元素分成两个含n/2元素的子序列

Step 2:用MS将两个子序列递归排序(最后可以将整个原序列分解成n个子序列)

Step 3:合并两个已排序好的序列

易知,MS的关键在于Merge过程。对于这一过程的理解,算法导论中给出了一个形象的模型。

即假设桌面上有两堆已排序好的的牌,且每一堆都正面朝下放置。然后我们分别从两堆牌中选取顶上的一张牌(选取之后,堆顶端又会露出新的顶牌),选取较小的一张,放入输出堆,另一张放回。

重复这一步骤,最后直到一堆牌为空。由于两堆牌都是已排序,所以可知,只要将剩下的那堆牌盖到输出堆即完成整个排序过程。

C语言代码如下:

#include 
#include

void ssort(int* a,int*Tmpa,int L,int m,int R)
{
  int x = L,y = m,k = L;//x:为比较部分左边开始位置,y:右边开始位置,k:存放的开始位置
  for(int i = L;i

使用时注意函数、参数命名问题。俗话说:“命名不规范,亲人两行泪。”

你可能感兴趣的:(算法,排序算法,c语言)