• 排序---归并排序


    我觉得要能独立写出某一个算法,就一定要在写代码之前有思路。时间复杂度(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("
    ");
    41 }
  • 相关阅读:
    git命令记录
    JS实现iframe自适应高度
    js生成某个范围内的随机数
    jquery实现按钮翻转动画
    删除ELK的索引
    ELK故障处理,不知道成功否
    软件开发的SOLID原则
    阿里云的远程桌面问题
    Zabbix增加邮箱后Server宕处理
    201811招投标培训要点
  • 原文地址:https://www.cnblogs.com/jinhong123/p/8721110.html
Copyright © 2020-2023  润新知