如何使用C ++库算法分区功能快速排序?

时间:2014-01-08 08:55:14

标签: c++ algorithm

我正在尝试使用C ++库分区函数执行quicksort,这是我的代码

int p;
int pred(int x)
{
    return x<=p;
}

    void quickSort(vector<int>::iterator first,vector<int>::iterator last) {
    if(first == last)
        return;
    if((first+1) == last)
        return;
    p = *first;
    auto mid = partition(first,last,pred);
    quickSort(first,mid);
    quickSort(mid,last);
    --mid;
    swap(*mid,*first);
    for(auto itr = first;itr!=last;++itr)
        cout<<(*itr)<<" ";
    cout<<endl;
}

它在分区函数中提供segFault。我想使用库函数。

2 个答案:

答案 0 :(得分:1)

bool pred(int x) //Return type should be bool.
{
    return x<=p;
}

内部quicksort

std::vector<int>::iterator mid = partition(first,last,pred);
quickSort(first,mid-1);
quickSort(mid,last);

休息,检查你是如何打电话的。

答案 1 :(得分:1)

这个使用lambda:

void quick(std::vector<int>::iterator first, std::vector<int>::iterator last)
{
    if (first == last) return;

    auto pivot = *first;
    auto mid = std::partition(first, last, [pivot](int i){return pivot > i;});
    if (mid == last) return;
    quick(first, mid);
    quick(++mid, last);
}