排序---归并排序

Posted jinhong123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序---归并排序相关的知识,希望对你有一定的参考价值。

我觉得要能独立写出某一个算法,就一定要在写代码之前有思路。时间复杂度(o(nlog(n)))

思路: 选择数组的中间值,对起左右进行递归,其中合并两个有序的数组,最后将放到tr数组中排序好的数重新放置到原数组中。

 1 #include<cstdio>
 2 using namespace std;
 3 int sr[5],tr[5];
 4 void rMerge(int sr[],int tr[],int s,int m,int t)   //合并两个有序的数组
 5 {
 6     int i=s,j=m+1,k=s;
 7     while(i<=m&&j<=t){
 8         if(sr[i]<sr[j]) tr[k++]=sr[i++];
 9         else tr[k++]=sr[j++];
10     }
11     while(i<=m) tr[k++]=sr[i++];  //如果有多余的数,就直接加入到里面即可
12     while(j<=t) tr[k++]=sr[j++];
13 }
14 
15 void copy(int sr[],int tr[],int s,int t)
16 {
17     for(int i=s;i<=t;i++)
18     {
19         sr[i]=tr[i];
20     }
21 }
22 
23 void aSort(int sr[],int s,int t)
24 {
25     if(s<t)
26     {
27         int m=(s+t)/2;
28         aSort(sr,s,m); //对其左右分别排序
29         aSort(sr,m+1,t);
30         rMerge(sr,tr,s,m,t); //合并到tr数组
31         copy(sr,tr,s,t); //将tr数组重新返回到sr数组中
32     }
33 }
34 
35 int main()
36 {
37     for(int i=0;i<5;i++) scanf("%d",&sr[i]);
38     aSort(sr,0,4);
39     for(int i=0;i<5;i++) printf("%d ",tr[i]);
40     printf("\n");
41 }

 

以上是关于排序---归并排序的主要内容,如果未能解决你的问题,请参考以下文章

归并排序:步骤讲解与代码实现

python代码实现归并排序(Merge Sort )

归并排序和快速排序

[ 数据结构 -- 手撕排序算法第六篇 ] 归并排序(上)--递归方法实现

排序算法之归并排序

算法排序02——归并排序介绍及其在分治算法思想上与快排的区别(含归并代码)