【发布时间】:2020-05-15 22:18:19
【问题描述】:
这是一个标准的递归快速排序实现,它成功地为未排序的项目排序较大的列表,但不能为“预排序”项目排序。我知道这需要更长的时间,但不会完全失败。有什么可能的改进吗?
void quickSort(int *array, size_t count) {
int pivot = array[count - 1];
int max_index = 0;
for (size_t i = 0; i < count - 1; ++i)
{
if (array[i] < pivot) {
swap(array[i], array[max_index]);
++max_index;
}
}
swap(array[max_index], array[count - 1]);
if (max_index > 1)
quickSort(array, max_index);
if (count - max_index - 1 > 1)
quickSort(array + max_index + 1, count - max_index - 1);
}
【问题讨论】:
-
“失败”是什么意思?
-
您能否展示一个输入失败的示例以及输出?
-
现在执行您的 9999 个项目的快速排序。您的快速排序耗时 0.005833 秒。现在执行 9999 个预排序项目的快速排序。 (进程 16128)以代码 -1073741571 退出。 ^^^^这是我收到的输出,当我放入9,999个项目进行排序时,它是一个测试程序。它不输出指示完全出错的时间,可能是堆栈溢出。
-
你使用的是哪个
swap函数? -
使用
库 std::swap
标签: c++ sorting quicksort implementation