gpt4 book ai didi

c++ - 我的 QuickSort 有问题

转载 作者:行者123 更新时间:2023-11-30 02:57:00 26 4
gpt4 key购买 nike

我有以下快速排序代码:

typedef struct tagDataPair {
int c_value;
float error;
} DataPair;

void SortByErrorQS(std::vector<DataPair>& points, int left, int right)
{
std::vector<int> stack;
stack.push_back(left);
stack.push_back(right);
while(stack.size() > 0)
{
right = stack.back();
stack.pop_back();
left = stack.back();
stack.pop_back();

float pivot = (points.at(left).error + points.at(right).error + points.at((left + right)>>1).error)/3;
int i = left, j = right;
DataPair temp;
while(i < j)
{
while(points.at(i).error <= pivot && (i <= right))
++i;
while(points.at(j).error > pivot && (j > left))
--j;
if(i <= j)
{
temp = points[i];
points[i] = points[j];
points[j] = temp;
i++; j--;
}
}

if(left < j)
{
stack.push_back(left);
stack.push_back(j);
}
if(i < right)
{
stack.push_back(i);
stack.push_back(right);
}
}
}

由于某种原因,这陷入了无限循环,我只是想不出出了什么问题,或者为什么。有人可以帮我指点一下这里发生了什么吗?

最佳答案

要将 std::sort 与您的 DataPair 结构一起使用,您可以提供自定义比较器。在 C++11 中,这可以通过 lambda 函数完成:

std::sort(points.begin(), points.end(), [](const DataPair& a, const DataPair& b) {
return a.error < b.error;
});

这将按照 error 的递增顺序对 DataPair 进行排序。

C++03的做法是提供一个比较函数:

bool compare(const DataPair& a, const DataPair& b)
{
return a.error < b.error;
}

std:sort(points.begin(), points.end(), compare);

std::sort 的复杂度保证为O(NlogN)。常见的实现使用快速排序或内插排序。

关于c++ - 我的 QuickSort 有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15009159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com