归并算法C语言实现

2297阅读 1评论2011-04-03 qianguozheng
分类:C/C++

  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. }
上一篇:2010年度 LQ开源软件获奖名单 (转载)
下一篇:网卡驱动和队列层中的数据包接收

文章评论