| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 360 人关注过本帖
标题:快速排序算法
只看楼主 加入收藏
feng1008wd
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-4-2
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:7 
快速排序算法
跟网上的其他版本几乎一模一样   不知道怎么就是调试不出结果  求大神们看看
程序代码:
#include<iostream>
using namespace std;

int Part(int* a,int low,int high){
    
    int temp=a[low];
    int j=high,i=low;
    while(low<high){
        while(a[high]>=temp&&high>low){
            high--;
        }
        a[low]=a[high];
        while(a[low]<=temp&&high>low){
            low++;
        }
        a[high]=a[low];
    }
    a[low]=temp;
    return low;    
    
}

void qsort(int* a,int low,int high){
    int pivotpos;
    while(low<=high){
        pivotpos=Part(a,low,high);
        qsort(a,low,pivotpos-1);
        qsort(a,pivotpos,high);
    }
}
int main(){
    int sort[10]={23,29,18,89,5,0,35,23,67,78};
    qsort(sort,0,9);
    for(int i=0;i<10;i++){
        cout<<sort[i];
    }
    system("pause");
    return 0;
}
搜索更多相关主题的帖子: color 网上 
2013-10-29 17:33
feng1008wd
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-4-2
收藏
得分:0 
回复 楼主 feng1008wd
更正一下Qiuck_sort(a,pivotpos,high);调整为Qiuck_sort(a,pivotpos+1,high);还是同样结果
2013-10-29 17:53
期待追忆
Rank: 2
等 级:论坛游民
帖 子:15
专家分:32
注 册:2013-3-14
收藏
得分:0 
楼主你厉害,还是递归写的。这好像要麻烦很多吧
2013-10-30 13:34
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:5 
void qsort(int* a,int low,int high){
    int pivotpos;
    while(low<=high){
        pivotpos=Part(a,low,high);
        qsort(a,low,pivotpos-1);
        qsort(a,pivotpos,high);
    }
}
算法是否正确先不说
这个不是死循环来的吗?
没有看到 low 和high 有变化

你这个while 什么时候结束?

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-10-30 13:54
期待追忆
Rank: 2
等 级:论坛游民
帖 子:15
专家分:32
注 册:2013-3-14
收藏
得分:5 
楼主我仔细想过了,你这个程序错在递归那,void qsort(int* a,int low,int high)就是这个函数错了。
我用笔按照你的程序试了下了,当执行完pivotpos=Part(a,low,high);这句的时候low=2,high=1.如果继续执行qsort(a,low,pivotpos-1);这句的话就错了
快速排序法你可以试试不用递归算算看,然后再考虑递归。
2013-10-30 13:56
feng1008wd
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-4-2
收藏
得分:0 
回复 4楼 yuccn
后面的两次递归调用qsort(a,low,pivotpos-1); qsort(a,pivotpos,high);不是会把high和low的值传递过去吗    不过好像确实是这里陷入死循环了  大神还是好好帮我看看程序吧   我看到网上一些版本也是这样写的   这段就没改过
2013-10-31 18:57
feng1008wd
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-4-2
收藏
得分:0 
回复 5楼 期待追忆
是那句错了,不过好像不是你说的那样   是陷入死循环了
2013-10-31 19:25
feng1008wd
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-4-2
收藏
得分:0 
问题解决了  把while(low<=high)改成if(low<=high)    我怎么这么混蛋  把while看成跟if一样。。。。
2013-10-31 19:54
快速回复:快速排序算法
数据加载中...
 
   



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

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