zoukankan      html  css  js  c++  java
  • 合并排序

    合并排序就是通过分治策略对n个元素进行排序,其算法复杂度为θ(nlg(n)),比插入排序复杂度要低,下面讲解两种排序方式的实现.

    input :a[10]={7,3,6,8,4,9,2,1,12,5}

    output :依照从小到大的顺序输出.

    首先给出合并排序的思想,是假设两段已经排好了序,再对其合并得出最终的序列的过程.其中的关键是在于合并过程,就是不断的套用子程序。

    1 /*分割*/
    2 void Mergesort (int a[],int left,int right)
    3 { if(left<right)
    4   int i=(left+right)/2;
    5   Mergesort(a,left,i);
    6   Mergesort(a,i+1,right);
    7   Merge(a,b,left,i,right);
    8 }
     1 /*合并*/
     2 void Merge(int a[],int b[],int p,int q,int r)
     3  4     int n1=q-p+1;
     5     int n2=r-p;
     6     int L[n1+1];int R[n2+1];
     7     for (int i=1,i<=n1,i++)
     8           L[i]=a[p=i-1];
     9     for (int j=1,j<=n2,j++)
    10          R[j]=a[q+j];
    11     int i=1,j=1;
    12     for(int k=p,k<=r,k++13     { if(L[i]<=R[j];
    14          b[k]=L[i];i=i+1;
    15       else b[k]=R[i];j=j+1;
    16    }

    而插入排序的思想则是在一段序列a[1...j-1]中插入一个a[j]的值,相应的代码可以写成:

    1 /*输入a[n]*/
    2 for (int j=1,j<n,j++)
    3  { int key=a[j];}
    4 for (i=j-1,i>=0,i--)
    5  { if (key<a[i])
    6    {a[i+1]=a[i];}
    7    a[i+1]=key;
    8  }

    插入的思想很好理解,就是将a[j]与前面的值进行比较,算法复杂度为θ(n2).

     

  • 相关阅读:
    复利计算器2.01
    复利计算器2.0
    0429团队3.0
    0428 团队项目合作2.0作业
    "数学口袋精灵"bug
    操作系统-实验2
    博客评论
    复利计算升级
    0408 结对合作
    0406复利计算5.0
  • 原文地址:https://www.cnblogs.com/cao-jie/p/3343719.html
Copyright © 2011-2022 走看看