| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 348 人关注过本帖, 1 人收藏
标题:一个快速排序问题,高手进!!!
只看楼主 加入收藏
a13468954732
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2010-9-25
结帖率:50%
收藏(1)
已结贴  问题点数:10 回复次数:3 
一个快速排序问题,高手进!!!
程序代码:
下面是我写的一个快速排序的实现,但得不到正确结果,希望朋友们帮忙看下,谢谢!


#include<stdio.h>
#include<stdlib.h>


int PARTITION(int a[],int start,int end){
    int x=a[end];
    int i=start-1;
    int temp1,temp2;
    for(int j=start;j<=end-1;j++){
        if(a[j]<=x){
            i++;
            temp1=a[i];a[i]=a[j];a[j]=temp1;
        }
    }
    temp2=a[i+1];a[i+1]=x;x=temp2;
    return i+1;
}

void QuickSort(int a[],int start,int end){
    if(start<end){
        int q=PARTITION(a,start,end);
        QuickSort(a,start,q-1);
        QuickSort(a,q+1,end);
    }
}
int main(){
    int n,*pt;
    printf("input the size of array:\n");
    scanf("%d",&n);
    pt=(int *)malloc(n*sizeof(int));
    printf("input n numbers:\n");
    for(int i=0;i<n;i++)
        scanf("%d",&pt[i]);
    QuickSort(pt,0,n-1);
    printf("the sorted numbers:\n");
    for(int j=0;j<n;j++)
        printf("%d  ",&pt[j]);
    return 0;
}

搜索更多相关主题的帖子: 朋友 
2010-09-25 16:56
a13468954732
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2010-9-25
收藏
得分:0 
都发这么久了,看的人也挺多的,难道就没有人愿意说点什么吗,这个问题困扰小弟一个下午,知道的说下,不甚感激!!!
2010-09-25 20:52
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:10 
首先,最后的输出有个低级错误:
    printf("the sorted numbers:\n");
    for(int j=0;j<n;j++)
        printf("%d  ",&pt[j]);

至于你的思路,我没搞明白,有点乱!你自己再理下?或者函数 PARTITION 加点注释?

------------------------------------------

终于看明白了!
程序代码:
int PARTITION(int a[],int start,int end)     //以a[end]为比较参照,二分原来的数组,返回二分点下标
{
    int x=a[end];
    int i=start-1;                           //二分点下标初始
    int temp1,temp2;
    for(int j=start;j<=end-1;j++){           //从开始到倒数第二个,逐个与最后一个比较   
        if(a[j]<=x){                         //如果找到一个小于等于a[end]的
            i++;                             //二分点下标后移一位
            temp1=a[i];a[i]=a[j];a[j]=temp1; //小于a[end]的数向前换,
        }
    }
    temp2=a[i+1];a[i+1]=x;x=temp2;           //a[end]与a[i+1]交换!(你怎么写成了x与a[i+1]交换??)
    return i+1;
}

修改如下:
程序代码:
int PARTITION(int a[],int start,int end)     //以a[end]为比较参照,二分原来的数组,返回二分点下标
{
    int x=a[end];
    int i=start-1;                           //二分点下标初始
    int temp1,temp2;
    for(int j=start;j<=end-1;j++){           //从开始到倒数第二个,逐个与最后一个比较   
        if(a[j]<=x){                         //如果找到一个小于等于a[end]的
            i++;                             //二分点下标后移一位
            temp1=a[i];a[i]=a[j];a[j]=temp1; //小于a[end]的数向前换,
        }
    }
    temp2=a[i+1];a[i+1]=a[end];a[end]=temp2; //a[end]与a[i+1]交换!
    return i+1;
}


[ 本帖最后由 jack10141 于 2010-9-25 21:37 编辑 ]

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-09-25 21:16
a13468954732
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2010-9-25
收藏
得分:0 
回复 2楼 a13468954732
呵呵,哥们,谢了,原来是哪个问题,汗颜!
下次问问题会注释的,多谢提醒!
再次感谢!
2010-09-25 23:24
快速回复:一个快速排序问题,高手进!!!
数据加载中...
 
   



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

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