【归并排序】算法实现

【归并排序】算法实现 

   i:开始合并时第一个序列的起始位置;

  s:合并前序列的大小;

  t:合并后序列的大小

 ii+s-1i+t-1定义被合并的两个序列的边界。

 

 代码实现
 1 //应用上篇随笔的合并算法,实现数组排序
 2 /********************************************************************/
 3 /************************【归并排序算法】******************************/
 4 /********************************************************************/
 5 void sort_merge(int array[],int size)
 6 {
 7     int  i;//开始合并时的第一个序列的起始位置
 8     int s;//合并前序列的大小
 9     int t = 1;//合并后序列的大小
10     
11     while(t<size)
12     {
13         i=0;
14         s=t;
15         t=2*s;
16         while((i+t)<size)
17         {
18             merge(array,i,i+s-1,i+t-1,t);//见 上篇随笔中的合并两个子顺序数组算法
19             i=i+t;
20         }
21         if(i+s<size)
22         {
23             merge(array,i,i+s-1,size-1,size-i);
24         }
25     }

运行结果:

算法的时间复杂度为:O(nlogn);

空间复杂度为:O(n);

posted on 2011-03-30 19:29  COS  阅读(258)  评论(0编辑  收藏  举报