首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速排序不对c++进行排序

快速排序不对c++进行排序
EN

Stack Overflow用户
提问于 2012-06-27 07:53:40
回答 2查看 300关注 0票数 0

我正在尝试编写一个快速排序函数来对10到1,000,000之间的任何数字进行排序。它遍历所有内容,但不排序,只是按原样打印向量。

由于某些原因,它过早地跳出了while循环。我使用的测试输入是:(3 6 2 5 1 7 9 10 4 8)。输出:(1 2 6 5 3 7 9 10 4 8)

代码语言:javascript
复制
int main()
{
    std::cout << "Which file would you like to sort?\n";
    std::cin >> file;

    std::ifstream in(file.c_str());

    // Read all the ints from in:
    std::copy(std::istream_iterator<int>(in), std::istream_iterator<int>(),
            std::back_inserter(numbers));

    int max = numbers.size();
    quickSort(numbers, 0, max-1);

    // Print the vector with tab separators:
    std::copy(numbers.begin(), numbers.end(),
            std::ostream_iterator<int>(std::cout, "\t"));
    std::cout << std::endl;

    return 0;
}


void quickSort(vector<int> &numbers, int start, int end)
{
    int i = start;
    int j = end;
    int pivot=numbers[start];
    int temp;
    while( i != j )
    {
        while( numbers[i] < pivot && i < j)
            i++;
        while( numbers[j] >= pivot && i < j)
            j--;

        temp = numbers[i];
        numbers[i] = numbers[j];
        numbers[j] = temp;

        if( j < start )
        {
            quickSort( numbers, start, j );
        }

        if( i < start )
        {
            quickSort( numbers, i, end);
        }
    }
    return;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-27 08:03:36

可能的原因之一是,当您移动索引来查找掉期时,实际上并不是在查看向量的内容。本节内容:

代码语言:javascript
复制
    while( i < pivot && i < j)
        i++;
    while( j >= pivot && i < j)
        j--;

应更改为:

代码语言:javascript
复制
    while( numbers[i] < pivot && i < j)
        i++;
    while( numbers[j] >= pivot && i < j)
        j--;

正如其中一个评论者提到的,更大的教训是学习使用一个好的调试器来单步执行您的代码。

同样,您应该选择pivot作为数组值。例如,pivot = numbers[start]

票数 2
EN

Stack Overflow用户

发布于 2012-06-27 07:57:22

这一行看起来不合时宜:

代码语言:javascript
复制
int pivot=numbers.size()/2;

无论startend的位置如何,您都会为枢轴拾取numbers向量的中间元素。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11217572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档