我正在尝试使用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。我想使用库函数。
答案 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);
}