分冶法实现合并排序

学算法最好的办法是写算法。所以接下的一段时间每天会抽出时间学习下《算法导论》并用c/c++语言实现算法。

分冶法实现合并排序,代码清单:

  1. /*
  2. 2008.9.10
  3. by tianzhihen
  4. */
  5. #include <iostream>
  6. using namespace std;
  7. void Merge(int *ia,int p, int q, int r);
  8. void Merge_Sort(int *ia,int p,int r);
  9. int main()
  10. {
  11.   int ia[9]={0,5,2,4,7,1,3,2,6};
  12.   Merge_Sort(ia,1,8);
  13.   for(int i=1;i<=8;i++)
  14.     cout << ia[i] << " ";
  15.   cout<< endl;
  16.   return(1);
  17. }
  18. void Merge_Sort(int *ia,int p,int r)
  19. {/*递归过程*/
  20.   if (p<r)
  21.   {
  22.     int q=(p+r)/2;
  23.     Merge_Sort(ia,p,q);   
  24.     Merge_Sort(ia,q+1,r);
  25.     Merge(ia,p,q,r);
  26.   }
  27. }
  28. void Merge(int *ia, int p,int q, int r)
  29. {/*排序过程*/
  30.   int n1=q-p+1;
  31.   int n2=r-q;
  32.   int *L= new int[n1+2];
  33.   int *R= new int[n2+2];
  34.   for (int i=1;i<=n1;i++)
  35.     L[i]=ia[p+i-1];
  36.   for (int j=1;j<=n2;j++)
  37.     R[j]=ia[q+j];
  38.   L[n1+1]=10000000; //构造无穷大值
  39.   R[n2+1]=10000000;
  40.   i=1;
  41.   j=1;
  42.   for (int k=p;k<=r;k++)  //排序
  43.   {
  44.     if(L[i]<=R[j])
  45.     {
  46.       ia[k]=L[i];
  47.       i=i+1;
  48.     }
  49.     else
  50.     {
  51.       ia[k]=R[j];
  52.       j=j+1;
  53.     }
  54.   }
  55.   delete [] L;
  56.   L=NULL;
  57.   delete [] R;
  58.   R=NULL;
  59. }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值