Chinaunix首页 | 论坛 | 博客
  • 博客访问: 630925
  • 博文数量: 1008
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5175
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-31 09:44
文章分类
文章存档

2012年(1008)

我的朋友

分类:

2012-08-01 11:27:12

原文地址:归并排序算法 作者:luozhiyong131

  1. #define N 8
  2. void merge(int x[], int low,int mid,int high)        /* 对子序列x[low~mid]和x[mid+1~high]进行归并操作 */
  3. {
  4.   int i, j, k;
  5.   int m, n;
  6.   int t;
  7.   int y[N];                                /* 临时缓冲区 */
  8.   i = low;                                /* 指向前一个子序列的起始位置 */
  9.   j = mid+1;                             /* 指向后一个子序列的起始位置 */
  10.   for(k=low; i<=mid&&j<=high; k++)            /* 逐个比较两个子序列中数据元素的大小 */
  11.   {
  12.     if(x[i] <= x[j])                         /* 将较小的数据元素放入缓冲区 */
  13.       y[k] = x[i++];
  14.     else
  15.       y[k] = x[j++];
  16.   }
  17.   /* 如果前一个子序列中的数据元素已经比较完毕,则直接复制后一个子序列中的数据元素到缓冲区 */
  18.   if(i <= mid)
  19.   {
  20.     for(m=i; m<=mid; m++)
  21.     {
  22.       y[k++] = x[m];
  23.     }
  24.   }
  25.   /* 如果后一个子序列中的数据元素已经比较完毕,则直接复制前一个子序列中的数据元素到缓冲区 */
  26.   if(j <= high)
  27.   {
  28.     for(n=j; n<=high; n++)
  29.     {
  30.       y[k++] = x[n];
  31.     }
  32.   }
  33.   /* 将缓冲区中的数据元素复制回原序列中 */
  34.   for (t=low; t<=high; t++)
  35.   {
  36.     x[t] = y[t];
  37.   }
  38. }
  39. void me_sort(int x[], int low,int high)            /* 定义归并排序函数,递归方式 */
  40. {
  41.   int mid;
  42.   if(low < high)
  43.   {
  44.     mid = (low+high)/2;
  45.     me_sort(x, low, mid);                 /* 递归调用,将子序列x[low~mid]归并为有序序列 */
  46.     me_sort(x, mid+1, high);                 /* 递归调用,将子序列x[mid+1~high]归并为有序序列 */
  47.     merge(x, low,mid,high);                /* 将子序列x[low~mid]和x[mid+1~high]进行归并 */
  48.   }
  49. }
阅读(142) | 评论(0) | 转发(0) |
0

上一篇:fedora9的smb配置

下一篇:快速排序算法

给主人留下些什么吧!~~