Chinaunix首页 | 论坛 | 博客
  • 博客访问: 249224
  • 博文数量: 35
  • 博客积分: 198
  • 博客等级: 入伍新兵
  • 技术积分: 443
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-28 10:30
文章分类

全部博文(35)

文章存档

2015年(5)

2014年(14)

2013年(8)

2012年(7)

2011年(1)

我的朋友

分类: C/C++

2012-09-29 11:03:25

合并排序的原理就是使用分治法策略,将一个规模为N的问题,划分为n个规模为m(mvoid MergerSort(int* _array,int left,int right)
{
    if(left
    {
         int middle=(left+right)/2;
 MergerSort(_array,left,middle);
 MergerSort(_array,middle+1,right);
         MergerArray(_array,left,right);

    }

}
C语言代码如下:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. //数组合并
  3. void MergeArray(int* sorce , int left ,int right)
  4. {
  5.     int k = 0 ;
  6.     int i = left ;
  7.     int middle = (left+right)/2;
  8.     int j = middle+1;
  9.     int* dest = new int[right-left+1];
  10.     while(i<=middle&& j<=right)
  11.     {
  12.         if(sorce[i]<sorce[j])
  13.         {
  14.             dest[k++] = sorce[j++];
  15.         
  16.         }else
  17.         {
  18.             dest[k++] = sorce[i++];
  19.             
  20.         }
  21.     }
  22.     while(i<=middle)
  23.     {
  24.         dest[k++] = sorce[i++];
  25.     }
  26.     while(j<=right)
  27.     {
  28.         dest[k++] = sorce[j++];
  29.     }
  30.     //将合并好的结果和源数组进行交换,相当于拷贝
  31.     int q = left ;
  32.     int m = 0 ;
  33.     while( q<=right)
  34.     {
  35.         sorce[q++] = dest[m++];
  36.     }
  37.     delete[] dest;
  38. }

  39. //合并排序
  40. void MergeSort(int* _array,int left,int right)
  41. {
  42.     if(left<right)
  43.     {
  44.         int middle = (left+right)/2;

  45.         MergeSort(_array,left,middle); //对左边排序
  46.         MergeSort(_array,middle+1,right);//对右边排序
  47.         //对排序结果进行合并    
  48.         MergeArray(_array,left,right);
  49.     }
  50.     
  51. }
  52. int main(int argc, char** argv)
  53. {
  54.     

  55.     int _wait_array[7] ={24,-2,11,9,31,0,21};

  56.     MergeSort(_wait_array,0,6);

  57.     return 0 ;

  58. }



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