Chinaunix首页 | 论坛 | 博客
  • 博客访问: 51107
  • 博文数量: 6
  • 博客积分: 73
  • 博客等级: 民兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-08 16:28
文章分类

全部博文(6)

文章存档

2016年(1)

2011年(5)

我的朋友

分类: C/C++

2011-04-03 21:14:48

  1. /*老钱著作:*/
  2. #include "stdio.h"
  3. int a[]={4,76,2,34,5,9,8,0,34,11,45,67,99,45,67,4};
  4. void merge(int a[],int low,int mid,int high)
  5. {
  6.  int h,i,j,k,/*b[high]*/ b[16];
  7.  h=low;
  8.  i=low;
  9.  j=mid+1;
  10.  /*当两个集合都没有取尽时*/
  11.  while ( (h<=mid) && (j<=high) )
  12.  {
  13.   if (a[h]<=a[j])
  14.   {
  15.    b[i]=a[h];
  16.    h=h+1;
  17.   }
  18.   else
  19.   {
  20.    b[i]=a[j];
  21.    j=j+1;
  22.   }
  23.   i=i+1;
  24.  }
  25.  /*处理剩余的元素*/
  26.  if (h>mid)
  27.  {
  28.   for (k=j;k<=high;k++)
  29.   {
  30.    b[i]=a[k];
  31.    i=i+1;
  32.   }
  33.  }
  34.  else
  35.  {
  36.   for (k=h;k<=mid;k++)
  37.   {
  38.    b[i]=a[k];
  39.    i=i+1;
  40.   }
  41.  }
  42.  /*将已归并的集合复制到a*/
  43.  for(k=low;k<=high;k++)
  44.  {
  45.   a[k]=b[k];
  46.  }
  47. }
  48. void mergesort(int a[],int low,int high)
  49. {
  50.  int mid;
  51.  if (low<high)
  52.  {
  53.   mid=(low+high)/2;
  54.   mergesort(a,low,mid);
  55.   mergesort(a,mid+1,high);
  56.   merge(a,low,mid,high);
  57.  }
  58. }
  59. int main(int argc,char *argv[])
  60. {
  61.  mergesort(a,0,15);
  62.  for (int i=0;i<16;i++)
  63.  {
  64.   printf(" %d ",a[i]);
  65.  }
  66.  printf("\n");
  67.  return 0;
  68. }
阅读(2235) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

qianguozheng2014-05-07 09:45:34

我竟然写过这个算法,真的不知道我以前这么牛逼啊