| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 627 人关注过本帖
标题:这个递归排序的程序编译正确,结果怎么不对,求高手帮忙看下。
只看楼主 加入收藏
z627724978
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2013-2-28
收藏
得分:0 
是归并 不是递归,抱歉啊
2013-03-04 13:49
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
仔细跟进了一下,第11行有错,细心


[fly]存在即是合理[/fly]
2013-03-04 17:14
tompobing
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:260
专家分:809
注 册:2012-12-9
收藏
得分:3 
编译有错误啊
2013-03-08 14:41
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:3 
对着书看一遍就是了

仰望星空...........不忘初心!
2013-03-08 14:43
gezhongfeng
Rank: 1
等 级:新手上路
帖 子:7
专家分:5
注 册:2013-2-2
收藏
得分:3 
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
void  wrt(int key[], int sz);
void  mergesort(int key[], int n);
void  merge(int a[], int b[], int c[], int m, int n);


void merge(int a[],int b[],int c[], int m,int n)
{
    int i=0,j=0,k=0;
    while(i<m && j<n)
        if(a[i] < b[i])
            c[k++]=a[i++];
        else
            c[k++]=b[j++];
        while (i<m)
            c[k++]=a[i++];
        while (j<n)
            c[k++] = b[j++];
}
void mergesort(int key[],int n)
{
    int j,k,m,*w;
    w =(int*) calloc(n, sizeof(int));
    for(m = 1; m < n; m *= 2)
    {
        if (n < m)
        {
            printf("ERROR:Array size not apower of 2 - bye!\n");
            exit(1);
        }
   
        assert(w != NULL);
        for (k = 1; k < n; k *=2)
        {
            for(j = 0; j < n - k; j += 2*k)
                merge(key + j, key + j + k, w + j, k, k);
            
            for (j = 0; j < n; ++j)
                key[j] = w[j];
    }

    }
   
   
   
   
    free(w);
}


void wrt(int key[], int sz)
{
    int  i;
    for (i = 0; i <sz; ++i)
        printf("%4d%s",key[i],((i < sz - 1) ? "" : "\n"));
}
int main(void)
{
    int sz,key[]={ 4, 3, 6, 67,5,8,7,9};
    sz=sizeof(key) / sizeof(int);
    printf("Before mergesort:\n");
    wrt(key,sz);
    mergesort(key,sz);
    printf("After mergesort:\n");
    wrt(key,sz);
    return 0;
}
2013-03-08 15:40
gezhongfeng
Rank: 1
等 级:新手上路
帖 子:7
专家分:5
注 册:2013-2-2
收藏
得分:0 
#include
#include
#include
void  wrt(int key[], int sz);
void  mergesort(int key[], int n);
void  merge(int a[], int b[], int c[], int m, int n);


void merge(int a[],int b[],int c[], int m,int n)
{
    int i=0,j=0,k=0;
    while(i<M && J<N)
        if(a[i] < b[i])
            c[k++]=a[i++];
        else
            c[k++]=b[j++];
        while (i<M)
            c[k++]=a[i++];
        while (j<N)
            c[k++] = b[j++];
}
void mergesort(int key[],int n)
{
    int j,k,m,*w;
    w =(int*) calloc(n, sizeof(int));
    for(m = 1; m < n; m *= 2)
    {
        if (n < m)
        {
            printf("ERROR:Array size not apower of 2 - bye!\n");
            exit(1);
        }
   
        assert(w != NULL);
        for (k = 1; k < n; k *=2)
        {
            for(j = 0; j < n - k; j += 2*k)
                merge(key + j, key + j + k, w + j, k, k);
            
            for (j = 0; j < n; ++j)
                key[j] = w[j];
    }

    }
   
   
   
   
    free(w);
}


void wrt(int key[], int sz)
{
    int  i;
    for (i = 0; i <SZ; ++I)
        printf("%4d%s",key[i],((i < sz - 1) ? "" : "\n"));
}
int main(void)
{
    int sz,key[]={ 4, 3, 6, 67,5,8,7,9};
    sz=sizeof(key) / sizeof(int);
    printf("Before mergesort:\n");
    wrt(key,sz);
    mergesort(key,sz);
    printf("After mergesort:\n");
    wrt(key,sz);
    return 0;
}
2013-03-08 15:40
快速回复:这个递归排序的程序编译正确,结果怎么不对,求高手帮忙看下。
数据加载中...
 
   



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

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