C++ 中的快速排序
QuickSort in c++
我正在尝试让快速排序工作,将 7000 个字符串的数组按字母顺序排序,但我得到的只是一个空白输出文件。它适用于我的气泡排序方法,但不适用于此方法。我确定这是一个明显的错误,但我无法确定它。
void ArrayStorage::quicksort(int first, int last, string list[])
{
int middle, p, index;
string temp, partition;
if (first < last)
{
middle = int(first + last)/2;
temp = list[middle];
list[middle] = list[first];
list[first] = temp;
partition = list[first];
p = first;
for (index = first + 1; index <= last; index++)
{
if(list[index] < partition)
{
p = p + 1;
temp = list[index];
list[index] = list[p];
list[p] = temp;
}
}
temp = list[first];
list[first] = list[p];
list[p] = temp;
quicksort(first, p - 1, list);
quicksort(p + 1, last, list);
}
}
我像这样调用该方法:
quicksort(0,GetSize() -1,namesArray);
使用内置的快速排序怎么样?
std::sort(&namesArray[0], &namesArray[GetSize()]);
以及每个快速排序循环中的原则是使 temp 变量处于以下位置:所有小于它的元素都放在左边,而更大的元素放在右边。所以那必须是一个循环,既包含向右迭代,以搜索是否有任何大于 temp 的数字,反之亦然。如果有,请将当前内容放在另一端,然后从另一端迭代,直到列表的整体迭代。循环后,所有小于 temp 的元素都应在左侧,而较大的元素应在右侧。
temp = list[first];
int f = first, l = last;
while (f < l)
{
while ((f <= l) && (list[l] < temp)) l--;
if (f <= l)
{
list[f] = list[l];
f++;
}
while ((f <= l) && (list[f] > temp)) f++;
if (f <= l)
{
list[l] = list[f];
l--;
}
}
这段代码应该可以工作。(我这台电脑上没有编译器)如果是这样,请尝试递归调用函数本身。
此外,还有一个建议。正如许多人推荐的那样,尝试自己调试并解决问题。
希望对你有帮助
相关文章:
- 如何修复我的快速排序实现?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 在 MIPS 中快速排序
- 不正确的比较和交换计数器输出用于快速排序功能
- 使用 std::vector C++快速排序,EXC_BAD_ACCESS代码 2
- 使用快速排序对 C++ 中的可视化工具错误进行排序
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 并行快速排序分区中的隔离错误
- 实现 3 路分区以实现快速排序
- 为什么这个快速排序实现给出了一个奇怪的输出
- 我的快速排序在对预排序的项目进行排序时失败,如何改进?
- 快速排序不适用于大型数组
- 快速排序;分段错误,但找不到位置?
- 快速排序函数在快速排序算法中如何工作?
- 3路随机快速排序分区功能
- 在最坏的情况下试验快速排序.它运行良好,但在最坏的情况下发生未知错误.我想
- 当给出预先排序的输入时,为什么我的快速排序实现很慢
- 我想要一个改变数组快速排序的2个数字的函数
- C++一个具有 2 个参数(___ _____,整数长度)的函数中的快速排序
- 迭代快速排序方法的分区算法问题