Chinaunix首页 | 论坛 | 博客
  • 博客访问: 140787
  • 博文数量: 66
  • 博客积分: 1571
  • 博客等级: 上尉
  • 技术积分: 715
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-24 22:55
文章分类

全部博文(66)

文章存档

2012年(66)

我的朋友

分类: C/C++

2012-07-19 14:47:04


点击(此处)折叠或打开


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <limits.h>
  3. #define MAXSIZE 10

  4. void Merge(int *A, int start, int mid, int end)
  5. {

  6.         int n1, n2;

  7.         n1 = mid - start + 1; //start-->mid 有mid-start+1个数值
  8.         n2 = end - mid; //mid+1-->endend-mid-1+1=end-mid个数值

  9.         int L[n1+1], R[n2+1]; //将数组增加一个单位长度存放边界标志值
  10.         int i, j, k;

  11.         for (i = 0; i< n1; i++) {
  12.                 L[i] = *(A+start+i); //将A中部分有序的数值放在L[]
  13.         }
  14.         for (j = 0; j< n2; j++) {
  15.                 R[j] = *(A+mid+j+1); //将A中另一部分有序的数值放在R[]
  16.         }
  17.         L[i] = INT_MAX; //放置数组有效数值结束边界标志值
  18.         R[j] = INT_MAX;

  19.         i = 0;
  20.         j = 0;
  21.         for (k = start; k <= end; k++) //将start到end共end-start+1个值放入A中
  22.              {
  23.                 if (L[i] <= R[j]) {

  24.                         *(A+k) = L[i];
  25.                         i++;
  26.                 } else {

  27.                         *(A+k) = R[j];
  28.                         j++;
  29.                 }
  30.         }
  31. }

  32. void Msort(int *A,int s,int e) //
  33. {
  34.    int m;
  35.    if(s<e)
  36.      {
  37.          m=(s+e)/2;
  38.          Msort(A,s,m); // 分
  39.          Msort(A,m+1,e); //分
  40.          Merge(A,s,m,e); //并
  41.      }
  42. }

  43. int main()
  44. {
  45.     int a[MAXSIZE];
  46.     printf("输入待排序数值:\n");
  47.     for(int i=0;i<10;i++)
  48.      scanf("%d",&a[i]);
  49.     printf("排序前-->\n\t:");
  50.     for(int i=0;i<10;i++)
  51.      printf("%d、",a[i]);
  52.     printf("\n");
  53.     Msort(a,0,9);
  54.     printf("排序后-->\n\t:");
  55.     for(int i=0;i<10;i++)
  56.      printf("%d、",a[i]);
  57.     printf("\n");
  58.     return 0;
  59. }


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