为什么我的阵列没有改变?快速排序尝试
Why doesn't my array change? Quicksort attempt
在维基百科关于快速排序的文章中,有一种特定的编码方式("最简单的")的草图,我尝试了一下
#include <cstdlib>
#include <iostream>
using namespace std;
int partition(int list[10], int high, int low);
void quicksort(int list[10], int high, int low);
int partition(int list[], int high, int low){
int pivot = list[high];
int i = list[low];
int swap_temp;
for (int j=0; j<high; j++){
if (list[j]<pivot){
swap_temp=list[high];
list[high]=list[j];
list[j]=swap_temp;
i++;
}
}
swap_temp = list[high];
list[high]=list[i];
list[i]=swap_temp;
return i;
}
void quicksort(int list[], int high, int low){
if (low<high){
int p=partition(list, high, low);
quicksort(list,low,p-1);
quicksort(list,p+1,high);
}
}
int main() {
int list[10]={3,5,1,6,34,224,23,62,124,57};
int low=0, high=10;
quicksort(list,low,high);
for (int k=0; k<high; k++){
cout << list[k] << endl;
}
return 0;
}
编译得很好,但是输出只是原始列表,完全没有改动。我已经研究过如何将数组传递给函数,我在这里所做的在其他程序中也有效(我专门编写了一个程序来检查,它接受一个整数数组,并将每个元素加倍,这很好)。算法在这里完全指定。为什么程序不改变数组?
您应该正确划分和快速排序函数。我认为你错误地在快速排序函数中传递高低倒序在配分函数中的for循环你应该从低开始。下面的代码可以为你工作。
#include <cstdlib>
#include <iostream>
using namespace std;
int partition(int list[10], int high, int low);
void quicksort(int list[10], int high, int low);
int partition(int list[], int low, int high){
int pivot = list[high];
int i = low-1;
int swap_temp;
for (int j=low; j<high; j++){
if (list[j]<pivot){
i++;
swap_temp=list[j];
list[j]=list[i];
list[i]=swap_temp;
}
}
i++;
swap_temp = list[high];
list[high]=list[i];
list[i]=swap_temp;
return i;
}
void quicksort(int list[], int low, int high){
if (low<high){
int p=partition(list, low, high);
quicksort(list,low,p-1);
quicksort(list,p+1,high);
}
}
int main() {
int list[10]={3,5,1,6,34,224,23,62,124,57};
int low=0, high=10;
quicksort(list,low,high-1);
for (int k=0; k<high; k++){
cout << list[k] << endl;
}
return 0;
}
相关文章:
- 如何修复我的快速排序实现?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 在 MIPS 中快速排序
- 不正确的比较和交换计数器输出用于快速排序功能
- 使用 std::vector C++快速排序,EXC_BAD_ACCESS代码 2
- 使用快速排序对 C++ 中的可视化工具错误进行排序
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 并行快速排序分区中的隔离错误
- 实现 3 路分区以实现快速排序
- 为什么这个快速排序实现给出了一个奇怪的输出
- 我的快速排序在对预排序的项目进行排序时失败,如何改进?
- 快速排序不适用于大型数组
- 快速排序;分段错误,但找不到位置?
- 快速排序函数在快速排序算法中如何工作?
- 3路随机快速排序分区功能
- 在最坏的情况下试验快速排序.它运行良好,但在最坏的情况下发生未知错误.我想
- 当给出预先排序的输入时,为什么我的快速排序实现很慢
- 我想要一个改变数组快速排序的2个数字的函数
- C++一个具有 2 个参数(___ _____,整数长度)的函数中的快速排序
- 为什么我的阵列没有改变?快速排序尝试