使用Quicksort C++对数组进行排序
Sorting arrays with Quicksort C++
我正在做一个项目(用于学校),其中一个要求是对数组进行排序。所以我决定使用快速排序。(我选择它是因为它是一个我现在还不知道的算法)我设法了解了它是如何工作的,我还找到了一个在c++中实现它的选项。
void quicksort(size_t v[], size_t start_pos, size_t end_pos)
{
size_t i, j, di, dj;
if (start_pos < end_pos)
{
i = start_pos, j = end_pos;
di = 0, dj = 1;
do
{
while (i < j && (v[j] > v[i] || v[j] == v[i])) i += di, j -= dj;
if (i < j)
std::swap(v[i], v[j]), di = (di + 1) % 2, dj = (dj + 1) % 2;
} while (i < j);
if (i - start_pos > 1)
sort(v, start_pos, i - 1);
if (end_pos - i > 1)
sort(v, i + 1, end_pos);
}
}
我不明白的是…为什么在最后2个if语句中使用">1"?我希望有人能为我澄清这一点。谢谢!:)
这两个计算分别提供左细分和右细分的大小。
如果大小为1或零,则该部分已经排序,不需要任何进一步处理。
if (i - start_pos > 1)
sort(v, start_pos, i - 1);
只有当范围是两个或多个元素时,才会进行排序调用。正如巴里所指出的,这可能是
if (i - start_pos > 1)
quicksort(v, start_pos, i - 1);
胜利者的评论也切中要害。
如果你仔细看,代码的上部执行排列与在i处索引的pivot元素和最后两个if相对应的数组,如果我们对剩余部分即pivot元件的右侧和左侧进行排序;end_pos。
相关文章:
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 合并排序不排序自创建数组类 c++
- 带有枚举方向/类型的气泡排序结构数组
- 为什么指针在对二维数组进行排序时无法正常工作?
- 排序并行数组
- 如何在数组 c++ 中对字符串进行排序
- 为什么在此排序算法实现中,向量明显比数组慢?
- 如何对不在数组中的变量进行排序?
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 按字母顺序对结构内数组变量中的名称进行排序
- 使用排序函数 c++ 对字符数组进行排序
- 使用 std::sort 对二维 c 数组进行排序
- 使用STL对用户输入数组进行排序的错误有什么解决方案吗?
- 使用 std::sort 对 C 样式的 2D 数组进行部分排序
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 对 0 、1 和 2 的数组进行排序