gpt4 book ai didi

c++ - 快速排序因 OOB 错误而失败

转载 作者:行者123 更新时间:2023-11-30 04:23:59 31 4
gpt4 key购买 nike

我的 QuickSort 实现因索引越界错误而失败,我无法弄清楚原因。

unsigned long PerformQuickSort(std::vector<unsigned int>& values) {
unsigned long comparisons = 0;
QuickSortJoiner(values, 0, values.size() - 1, comparisons);
return comparisons;
}

void QuickSortJoiner(std::vector<unsigned int>& values, std::size_t first, std::size_t last, unsigned long& comparisons) {

if(first >= last) return;

std::size_t pivot = first + (last - first) / 2;
std::size_t newPivot = QuickSortPartitioner(values, first, last, pivot, comparisons);
QuickSortJoiner(values, first, newPivot - 1, comparisons);
QuickSortJoiner(values, newPivot + 1, last, comparisons);

}

std::size_t QuickSortPartitioner(std::vector<unsigned int>& values, std::size_t first, std::size_t last, std::size_t pivot, unsigned long& comparisons) {
unsigned int value = values[pivot];
Swap(values[pivot], values[last]);
std::size_t storeAt = first;
for(std::size_t i = first; i < last; ++i) {
++comparisons;
if(values[i] < value) {
Swap(values[i], values[storeAt]);
++storeAt;
}
}
Swap(values[storeAt], values[last]);
return storeAt;
}

最佳答案

newPivot 变为 0 时,下一次调用无符号类型的 newPivot - 1 将溢出到最大值。在 QuickSortPartitioner

之后检查 newPivot == 0

关于c++ - 快速排序因 OOB 错误而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13055066/

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