加文

在这个世界上取得成就的人,都努力去寻找他们想要的机会,如果找不到机会,他们便自己创造机会。 -- 萧伯纳
随笔 - 14, 文章 - 56, 评论 - 1, 引用 - 0
数据加载中……

二路归并递归实现

#include <iostream>
using namespace std;
//参数:r表示待排序数组,s为r中第一个有序表的第一个下标,m为第一个有序表的最后一个下标;s是r中的最后一个下标
void merge( int r[],int s,int m,int t)
{
    
int tempr[50];
    
for(int k = s; k <= t; k++ )
        tempr[k] 
= r[k];
    
int s1 = s;
    
int s2 = m+1;
    
int rs = s;
    
while(s1 <= m && s2 <= t)
        
if(tempr[s1]<=tempr[s2])
            r[rs
++= tempr[s1++];
        
else
             r[rs
++= tempr[s2++];
    
while(s1 <= m)
        r[rs
++= tempr[s1++];
    
while(s2 <= t)
        r[rs
++= tempr[s2++];
 }  
void MSort(int r[],int s,int t)
{
    
int m;
    
if(s==t)
        ;
    
else
    {
        m 
= (s+t)/2;
        MSort(r,s,m);
        MSort(r,m
+1,t);
        merge(r,s,m,t);
    }
}
int main()
{
    
int r[11= {34,45,56,2,4,6,12,3,4567,78,11};
    MSort(r,
0,10);
    
for(int i=0;i<11;i++)        
        cout
<<r[i]<<endl;
    getchar();
    
return 0;
}

posted on 2011-10-25 10:43 chxzwj 阅读(330) 评论(0)  编辑 收藏 引用 所属分类: 常用算法


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理