归并排序(merge sort)源码

 
  1. #include <iostream>
  2. using namespace std;
  3. void merge(int ia[], int p, int q, int r)
  4. {
  5.     int n1 = q - p + 1;     // n1 = [p, q]
  6.     int n2 = r - q;         // n2 = (q, r]
  7.     int ia1[n1];
  8.     int ia2[n2];
  9.     for(int i=0; i<n1; i++)
  10.     {
  11.         ia1[i] = ia[p+i];
  12.     }
  13.     ia1[n1] = 0x7FFFFFFF;   // sentinel
  14.     for(int i=0; i<n2; i++)
  15.     {
  16.         ia2[i] = ia[q+1+i];
  17.     }
  18.     ia2[n2] = 0x7FFFFFFF;   // sentinel
  19.     
  20.     int i, j, k;
  21.     i = j = 0;
  22.     k = p;
  23.     
  24.     while( k <= r )
  25.     {
  26.         if( ia1[i]<=ia2[j] )
  27.         {
  28.             ia[k] = ia1[i];
  29.             i++;
  30.         }
  31.         else
  32.         {
  33.             ia[k] = ia2[j];
  34.             j++;
  35.         }
  36.         k++;
  37.     }
  38. }
  39. void MergeSort(int ia[], int p, int q)
  40. {
  41.     if(q > p)
  42.     {
  43.         int r = (p+q)/2;
  44.         MergeSort(ia, p, r);
  45.         MergeSort(ia, r+1, q);
  46.         merge(ia, p, r, q);
  47.     }
  48. }
  49. int main()
  50. {
  51.     int ia[6] = {6,5,4,3,2,1};
  52.     MergeSort(ia, 0, 5);
  53.     for(int i=0; i<6; i++)
  54.     {
  55.         cout << ia[i] << endl;
  56.     }
  57. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值