| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 430 人关注过本帖
标题:麻烦大家帮忙看看这个合并排序程序哪里错了
只看楼主 加入收藏
sourse
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-9-18
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:4 
麻烦大家帮忙看看这个合并排序程序哪里错了
程序可以运行,但是结果不正确,弄了很久都不知道哪里错了,求助下大家。。谢谢

程序代码:
#include <stdio.h>

int a[]={78,15,24,16,89,135,4,66};
int b[8];

void merge1(int low,int mid,int high)
{
    int i=low,j=mid+1;
    int    k=0;
    while (i < mid && j < high)
        if (a[i]<a[j])
            b[k++]=a[i++];
        else
            b[k++]=a[j++];

    while (i<mid) 
        b[k++]=a[i++];
    while (j<high) 
        b[k++]=a[j++];
}

void sort1(int low,int high)
{
    if(low<high)
    {
        int mid=(low+high)/2;
        printf("sort (%d-%d, %d-%d) %d %d %d %d %d %d %d %d\n", 
               low, mid, mid+1, high, 
               b[0],b[1], b[2], b[3], b[4], b[5], b[6], b[7]);
        sort1(low,mid);
        sort1(mid+1,high);
        merge1(low,mid,high);
        printf("merge (%d-%d, %d-%d) to %d %d %d %d %d %d %d %d\n", 
               low, mid, mid+1, high, 
               b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7]);
    }

}

void main()
{
    sort1(0,7);
}
搜索更多相关主题的帖子: color 
2011-09-18 03:48
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:10 
程序代码:
void merge1(int low,int mid,int high)
{
    int i=low,j=mid+1;
    int    k=low;
    while (i <=mid && j <= high)
        if (a[i]<a[j])
            b[k++]=a[i++];
        else
            b[k++]=a[j++];

    while (i<=mid) 
        b[k++]=a[i++];
    while (j<=high) 
        b[k++]=a[j++];
    for(int index=low;index<=high;index++)
    {
        a[index]=b[index];
    }
}


你分段排序后排序的结果都没有赋值给a数组,哪来的排序。

离恨恰如春草,更行更远还生。
2011-09-18 10:40
编程的乐趣
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:229
专家分:1027
注 册:2011-4-4
收藏
得分:0 
hehe
2011-09-18 10:43
sourse
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-9-18
收藏
得分:0 
回复 2楼 玩出来的代码
呃,终于弄明白了,给绕进去了。。谢谢哈。。
2011-09-18 13:36
lqsh
Rank: 2
来 自:山东济南
等 级:论坛游民
帖 子:26
专家分:58
注 册:2011-8-29
收藏
得分:0 
程序代码:
#include <iostream>
using namespace std;
const int MAX=10;
void marge(int n1[],int m1[],int i,int m,int n)
{
    int k,j,l;
    for(j=m+1,k=i;j<=n&&i<=m;++k)
    {
        if(n1[k]<=n1[j])
        {
            m1[k]=n1[i++];
        }
        else
        {
            m1[k]=n1[j++];
        }
    }
    while(i<=m)
    {
      m1[k++]=n1[i++];
    }
    while(j<=n)
    {
        m1[k++]=n1[j++];
    }
}
void marge_sort(int n[],int n1[],int s,int r)
{
    //将n[s-r]排好序归并为n1[s-r]
    int n2[MAX];
    if(s==r)
    {
        n1[s]=n[s];//递归结束条件
    }
    else
    {
        int mid=(s+r)/2;//将n[s-r]均分成n[s-mid]和n[mid+1-r]
        marge_sort(n,n2,s,mid);//递归的将n[s-mid]归并为有序的n2[s-mid]
        marge_sort(n,n2,mid+1,r);//递归的将n[mid+1-r]归并为有序的n2[mid+1-r]
        marge(n2,n1,s,mid,r);//将n2[s-mid]和n2[mid+1-r]合并为n1[s-r]
    }
}
int main()
{
    int m[]={0,2,1,4,3,5};
    marge_sort(m,m,0,5);
    for(int i=0;i<=5;i++)
    {
        cout<<m[i]<<" ";
    }
    cout<<endl;
    return 0;
}
顺便也写了一个希望能给你一点帮助
2011-09-18 22:44
快速回复:麻烦大家帮忙看看这个合并排序程序哪里错了
数据加载中...
 
   



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

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