快速排序表现得很有趣
QuickSort acting funny
本文关键字:快速排序 更新时间:2023-10-16
我有一个包含字符串(单词)向量的类单词列表。向量长 88994,我正在尝试使用快速排序对其进行排序。当我运行我的代码时,它排序得很好,但有些元素似乎不合适。例如,所有内容都将按字母顺序排列,但有一个单词将不合适......这种情况会发生几次。有什么我没有正确实施的吗?
void WordList::quickSort(int start, int end){
if( start < end){
int pivot = partition(start, end);
quickSort(start, pivot-1);
quickSort(pivot+1, end);
}
}
int WordList::partition(int start, int end){
int pivot = end;
int leftList = start-1;
for(int j = start; j < (end - 1); j++){
if( LoWords[j].compare(LoWords[pivot]) <= -1){
leftList++;
string temp = LoWords[leftList];
LoWords[leftList] = LoWords[j];
LoWords[j] = temp;
}
}
string anotherTemp = LoWords[leftList+1];
LoWords[leftList+1] = LoWords[end];
LoWords[end] = anotherTemp;
return leftList+1;
}
我认为您必须将分区算法更改为如下所示:
#include <iostream>
#include <vector>
#include <string>
using std::vector;
using std::string;
// I don't have your class, so I'll use a global variable to keep your signature
vector<string> words{
"mouse", "APU", "CPU","mainboard", "SATA", "hard drive", "GPU", "fan", "case"
};
int partition( int start, int pivot ) {
int i = start;
int j = pivot - 1;
while ( i <= j ) {
if ( words[j] > words[pivot] ) {
--j;
continue;
}
if ( words[i] <= words[pivot] ) {
++i;
continue;
}
if ( i < j ) {
// You can use std::swap(words[i],words[j]); from <algorithm> instead
auto temp = words[i];
words[i] = words[j];
words[j] = temp;
++i;
--j;
}
}
// or std::swap(words[pivot],words[j+1]);
auto temp = words[pivot];
words[pivot] = words[j + 1];
words[j + 1] = temp;
return j + 1;
}
void quickSort( int start, int end ) {
if( start < end) {
int pivot = partition(start, end);
quickSort(start, pivot - 1);
quickSort(pivot + 1, end);
}
}
int main() {
quickSort(0, words.size() - 1);
for ( auto & i : words )
std::cout << i << 'n';
return 0;
}
编辑
为了使您的函数正常工作,我认为您必须更改行
for(int j = start; j < (end - 1); j++) { ...
到
for(int j = start; j < end; j++) {...
相关文章:
- 如何修复我的快速排序实现?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 在 MIPS 中快速排序
- 不正确的比较和交换计数器输出用于快速排序功能
- 使用 std::vector C++快速排序,EXC_BAD_ACCESS代码 2
- 使用快速排序对 C++ 中的可视化工具错误进行排序
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 并行快速排序分区中的隔离错误
- 实现 3 路分区以实现快速排序
- 为什么这个快速排序实现给出了一个奇怪的输出
- 我的快速排序在对预排序的项目进行排序时失败,如何改进?
- 快速排序不适用于大型数组
- 快速排序;分段错误,但找不到位置?
- 快速排序函数在快速排序算法中如何工作?
- 3路随机快速排序分区功能
- 在最坏的情况下试验快速排序.它运行良好,但在最坏的情况下发生未知错误.我想
- 当给出预先排序的输入时,为什么我的快速排序实现很慢
- 我想要一个改变数组快速排序的2个数字的函数
- C++一个具有 2 个参数(___ _____,整数长度)的函数中的快速排序
- 迭代快速排序方法的分区算法问题