标题:二路归并排序算法的实现(下面代码好像不通,请高手指正)
取消只看楼主
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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-291916-1-1.html




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

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