| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1033 人关注过本帖
标题:C++ 实现快速排序问题?
只看楼主 加入收藏
hcs_xiaohan
Rank: 2
等 级:论坛游民
帖 子:40
专家分:23
注 册:2016-7-4
结帖率:91.67%
收藏
已结贴  问题点数:20 回复次数:1 
C++ 实现快速排序问题?
程序目的如题,代码如下:
#include <iostream>
#include <cstdlib>
#include <algorithm>

using namespace std;

template <typename T>
void quicksort(T B[], int lo, int hi);
template <typename T>
int Partition(T B[], int lo, int hi);

int main() {

    int a[] = {6,5,0,1,34,9,4,4,4,2,-1};
    for(int i = 0; i < 11; i++)
        cout << a[i] << ",";
    cout << endl;

    quicksort(a, 0, 11);
   
    for(int i = 0; i < 11; i++)
        cout << a[i] << ",";
    cout << endl;

    return 0;
}

template <typename T>
void quicksort(T B[], int lo, int hi) {
    if(hi - lo < 2) return;
   
    int mi = Partition(B, lo, hi - 1);

    quicksort(B, lo, mi);
    quicksort(B, mi+1, hi);
}

template <typename T>
int Partition(T B[], int lo, int hi) {
    swap(B[lo], B[rand()%(hi - lo)]);
    T pivot = B[lo];

    while(lo < hi) {
        while(pivot <= B[hi])
            hi--;
        B[lo] = B[hi];

        while(B[lo] <= pivot)
            lo++;
        B[hi] = B[lo];
    }

    B[lo] = pivot;

    return lo;
}

运行结果如下:

6,5,0,1,34,9,4,4,4,2,-1,
1,0,2,4,-1,5,-309542368,20689408,9,34,-309542080,
*** stack smashing detected ***: ./test terminated
Aborted (core dumped)

请各位看看是哪儿错了?
搜索更多相关主题的帖子: include 
2016-12-06 21:56
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:20 
这种问题应该对照着正确的代码一行行的检查,别人没时间帮你做这些事

rand()%(hi - lo) 应该是 lo + rand()%(hi-lo)

while(pivot < B[hi])
    hi--;
hi 会越界,应该是 while( lo<hi && pivot < B[hi] )
下面那个while同样的道理

2016-12-07 08:52
快速回复:C++ 实现快速排序问题?
数据加载中...
 
   



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

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