排序就是为了好玩,快速排序
Sorting for the heck of it -- Quicksort
我们必须为自己的可比基类做一个优化的快速排序。我无论如何也不能使它成功。该算法似乎直截了当,但我不能看到我的代码工作。我有一个DateTime类扩展可比,我用它来测试和排序似乎工作,但每20个左右运行一个值是不合适的,当我使用插入排序对数组的块小于8整个排序被抛出不正常。
在我的分区方法中,当我将枢轴移到末尾并在开始和结束处开始指针时,它是有效的。我想将枢轴移动到end - 1,因为第一个和最后一个已经排序,并且指针开始于第一个+ 1和结束于-2,但如果我尝试,一切都崩溃了,我不明白为什么。
所以我现在有工作的东西。当我不在较小的子数组上使用插入排序时,它会变得有点痉挛,这很麻烦,但最终我会弄清楚的。感谢ben j指出掉出数组…这就导致了插入排序问题。:)
我当前的代码在
下面 Comparable** partition(Comparable** from, Comparable** to)
{
Comparable** pivot = from + (to - from) / 2;
SortFirstMiddleLast(from, pivot, to - 1);
swap(*pivot, *to);
pivot = to;
++from; to -= 2;
while (from <= to)
{
while (**from <= **pivot && from <= to) ++from;
while (**to >= **pivot && from <= to) --to;
if (from < to)
{
swap(*from, *to);
++from; --to;
}
}
swap(*from, *pivot);
return from;
}
从你给我们看的代码和你对问题的评论来看,我唯一的猜测是from
和to
并不意味着你想的那样。您的代码将to - from
作为要排序的段的长度。如果这是准确的(而不仅仅是近似的枢轴选择),这将意味着to
实际上是指向一个元素刚好超出区域排序。这是合理的,但swap<Comparable*>(*pivot, *(to))
将交换枢轴从列表的末尾。
相关文章:
- 如何修复我的快速排序实现?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 在 MIPS 中快速排序
- 不正确的比较和交换计数器输出用于快速排序功能
- 使用 std::vector C++快速排序,EXC_BAD_ACCESS代码 2
- 使用快速排序对 C++ 中的可视化工具错误进行排序
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 并行快速排序分区中的隔离错误
- 实现 3 路分区以实现快速排序
- 为什么这个快速排序实现给出了一个奇怪的输出
- 我的快速排序在对预排序的项目进行排序时失败,如何改进?
- 快速排序不适用于大型数组
- 快速排序;分段错误,但找不到位置?
- 快速排序函数在快速排序算法中如何工作?
- 3路随机快速排序分区功能
- 在最坏的情况下试验快速排序.它运行良好,但在最坏的情况下发生未知错误.我想
- 当给出预先排序的输入时,为什么我的快速排序实现很慢
- 我想要一个改变数组快速排序的2个数字的函数
- C++一个具有 2 个参数(___ _____,整数长度)的函数中的快速排序
- 排序就是为了好玩,快速排序