| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 668 人关注过本帖
标题:合并排序
取消只看楼主 加入收藏
Silence_
Rank: 2
等 级:论坛游民
帖 子:8
专家分:22
注 册:2012-9-18
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:3 
合并排序
程序代码:
//这个程序本来是合并排序的,但是输出的结果与预期的不符,哪位大神能够解释一下
#include <iostream.h>
#include <memory.h>

void merge(int A[],int p,int q,int r,int m);
void merge_sort(int A[],int n);

int main()
{
    int B[]={12,5,4,63,79,33,10,58,69,14};
    merge_sort(B,10);
    for(int i=0;i<10;i++)
        cout<<B[i]<<" ";
    cout<<endl;
    return 0;
}
void merge(int A[],int p,int q,int r)
{
    int* bp = new int[r-p+1];
    int i,j,k;
    i=p;
    j=q+1;
    k=0;
    while(i<=q&&j<=r)
    {
        if(A[i]<=A[j])
            bp[k++] = A[i++];
        else
            bp[k++] = A[j++];
    }
    if(i==q+1)
    {
        for(;j<=r;j++)
            bp[k++] = A[j++];
    }
    else
    {
        for(;i<=q;i++)
            bp[k++] = A[i++];
    }
    k=0;
    for(i=p;i<=r;i++)
        A[i++] = bp[k++];
    //cout<<A[i]<<endl;
    delete bp;
}
void merge_sort(int A[],int n)
{
    int s,i,t=1;
    while(t<n)
    {
        s=t; 
        t = 2*s; 
        i=0;   //s是合并前序列的大小,t是合并后序列的大小,每次合并元素的起始位置为i
        while(i+t<n)
        {   
            merge(A,i,i+s-1,i+t-1);
            i=i+t;
        }
        if(i+s<n)
            merge(A,i,i+s-1,n-1);
    }   
}
搜索更多相关主题的帖子: include 
2012-10-16 22:33
Silence_
Rank: 2
等 级:论坛游民
帖 子:8
专家分:22
注 册:2012-9-18
收藏
得分:0 
回复 2楼 zhu224039
if(i==q+1)
    {
        for(;j<=r;j++)
            bp[k++] = A[j++];
    }
    else
    {
        for(;i<=q;i++)
            bp[k++] = A[i++];
    }
    k=0;
    for(i=p;i<=r;i++)
        A[i++] = bp[k++];
你说的那段代码是没问题的,错误主要是以上红色地方,去掉就行了.
2012-10-17 00:54
Silence_
Rank: 2
等 级:论坛游民
帖 子:8
专家分:22
注 册:2012-9-18
收藏
得分:0 
回复 6楼 zhu224039
兄台,这这个上面还没有用到分治,只有有一个合并的过程,没用递归和分治的策略去解决这个问题。
2012-10-17 01:00
Silence_
Rank: 2
等 级:论坛游民
帖 子:8
专家分:22
注 册:2012-9-18
收藏
得分:0 
回复 3楼 zhu224039
是这i++ j++的问题,去掉后就没问题了.
2012-10-17 01:02
快速回复:合并排序
数据加载中...
 
   



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

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