| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 591 人关注过本帖
标题:二路归并排序算法的实现(下面代码好像不通,请高手指正)
取消只看楼主 加入收藏
hwshtongxin
Rank: 1
等 级:新手上路
帖 子:35
专家分:4
注 册:2009-1-6
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:0 
二路归并排序算法的实现(下面代码好像不通,请高手指正)
#include<iostream>
using namespace std;
////
int b[7];
void merge(int a[],int m, int n, int l);//将两个与排序数列组合成有序数列
void merge_sort(int a[],int m, int n);//递归的排序数列
////////////////
int main()
{
  int a[7]={1,2,3,4,5,6,7};
  merge_sort(a,0,6);
  cout<<endl;
  for(int i=0; i<7; i++)
      cout<<b[i]<<'\t';
  cout<<endl;
  //////////////////////
   return 0;
}
///
void merge_sort(int a[], int m, int n)
{
 int q;
 if(m<n)
 {
   q=(m+n)/2;
   merge_sort(a,m,q);//当m=n时,此函数调用结束,而没有机会执行下面的的函数,
   //但是,目的要求要实现 在上面函数调用结束后再继续执行下面的函数,那么如何来改进?
   merge_sort(a,q+1,n);
   merge(a,m,q,n);
 }
 //////////////////////
}
//////////////////////
//////////////////////
void merge(int a[],int m, int n, int l)
{
    int i, j, k;
////////////////////
    k=m;
    i=m;
    j=n+1;
    //////////////
    while( i<=n && j<=l )
    {
     if( a[i]<=a[j] )
     {
       b[k]=a[i];
       i++;
     }
     else
     {
         b[k]=a[j];
         j++;
     }
    }
    ///////////////
    while( i<=n)
    {
        b[k]=a[i];
        i++; k++;
    }
    while( j<=l)
    {
        b[k]=a[j];
        k++;
        j++;
    }
}
搜索更多相关主题的帖子: 代码 算法 
2009-11-11 13:48
快速回复:二路归并排序算法的实现(下面代码好像不通,请高手指正)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022353 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved