Chinaunix首页 | 论坛 | 博客
  • 博客访问: 331749
  • 博文数量: 72
  • 博客积分: 1730
  • 博客等级: 上尉
  • 技术积分: 743
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-27 18:49
文章分类

全部博文(72)

文章存档

2012年(72)

我的朋友

分类: C/C++

2012-05-16 14:20:15


点击(此处)折叠或打开

  1. #include <iostream>
  2. //#include <stdlib.h>
  3. #include <new>
  4. using namespace std;

  5. void Merge(int *,int ,int,int );
  6. void Merge_Sort(int *,int ,int );
  7. void PrintArray(int *,int );

  8. int main ()
  9. {
  10.     int A[]= {2,4,5,7,1,2,3,6};
  11.     PrintArray(A,sizeof(A)/sizeof(int));
  12.     Merge_Sort(A,1,8);
  13.     PrintArray(A,sizeof(A)/sizeof(int));
  14.     return 0;
  15. }

  16. void PrintArray(int *head,int len)
  17. {
  18.     cout<<(" datas:")<<endl;
  19.     int i=0;
  20.     for(i=0; i<=len-1; i++) {
  21.         cout<< head[i] ;
  22.     }
  23.     cout<<endl;
  24. }

  25. void Merge_Sort(int *A,int p, int r)
  26. {
  27.     int q;
  28.     if (p<r) {
  29.         q=(p+r)/2;
  30.         Merge_Sort(A,p,q);
  31.         Merge_Sort(A,q+1,r);
  32.         Merge(A,p,q,r);
  33.     }
  34. }

  35. void Merge(int *A,int p,int q,int r)
  36. {
  37.     int n1=q-p+1;
  38.     int n2=r-q;
  39.     int *L= new int[n1];
  40.     int *R= new int[n2];

  41.     for(int i=0; i<n1; i++) {
  42.         L[i]=A[p+i-1];
  43.     }
  44.     for(int j=0; j<n2; j++) {
  45.         R[j]=A[q+j];
  46.     }

  47.     int i=0;
  48.     int j=0;
  49.     int k=p-1;
  50.     while((i<=n1-1)&&(j<=n2-1)) {
  51.         if(L[i]<=R[j]) {
  52.             A[k]=L[i];
  53.             i++;
  54.         } else {
  55.             A[k]=R[j];
  56.             j++;
  57.         }
  58.         k++;
  59.     }
  60.     while (i<n1-1) {
  61.         A[k]=L[i];
  62.         i++;
  63.         k++;
  64.     }
  65.     while (j<n2-1) {
  66.         A[k]=R[j];
  67.         i++;
  68.         j++;
  69.     }
  70.     delete []L;
  71.     delete []R;
  72. }

阅读(1289) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~