码迷,mamicode.com
首页 > 编程语言 > 详细

排序---归并排序

时间:2018-04-05 11:34:32      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:i++   lse   []   merge   void   class   amp   space   时间复杂度   

我觉得要能独立写出某一个算法,就一定要在写代码之前有思路。时间复杂度(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 }

 

排序---归并排序

标签:i++   lse   []   merge   void   class   amp   space   时间复杂度   

原文地址:https://www.cnblogs.com/jinhong123/p/8721110.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!