这是本人写的一个快速排序的程序,但是运行后还是按原序输出,感觉是参数没能传进去,麻烦大家帮忙指点一下啊
#include<iostream>
using namespace std;
void Quicksort(int*array,int len){
if(len<=1){
return;
}
int *left=new int [len];
int *right=new int [len];
int key=array[0];
int lidx=0;
int ridx=0;
for(int i=1;i<len;i++){
if(array[0]<key){
left[lidx++]=array[i];
}
else{
right[ridx++]=array[i];
}
}
Quicksort(left, lidx );
Quicksort(right,ridx);
int idx=0;
for(int i=0;i<lidx;i++){
array[idx++]=left[i];
}
array[idx++]=key;
for(int i=0;i<ridx;i++){
array[idx++]=right[i];
}
delete[] left;
delete[] right;
}
int main(){
int a[10]={2,5,0,8,3,11,56,23,17,66};
Quicksort(a,10);
for(int i=0;i<10;i++){
cout<<a[i];
}
return 0;
}
#include<iostream>
using namespace std;
void Quicksort(int*array,int len){
if(len<=1){
return;
}
int *left=new int [len];
int *right=new int [len];
int key=array[0];
int lidx=0;
int ridx=0;
for(int i=1;i<len;i++){
if(array[0]<key){
left[lidx++]=array[i];
}
else{
right[ridx++]=array[i];
}
}
Quicksort(left, lidx );
Quicksort(right,ridx);
int idx=0;
for(int i=0;i<lidx;i++){
array[idx++]=left[i];
}
array[idx++]=key;
for(int i=0;i<ridx;i++){
array[idx++]=right[i];
}
delete[] left;
delete[] right;
}
int main(){
int a[10]={2,5,0,8,3,11,56,23,17,66};
Quicksort(a,10);
for(int i=0;i<10;i++){
cout<<a[i];
}
return 0;
}
解决方案
15
if(array[0]<key){
left[lidx++]=array[i];
}
给你描红加粗了~
有问题的时候断点调试吧~~~
left[lidx++]=array[i];
}
给你描红加粗了~
有问题的时候断点调试吧~~~
5
template <class T> void mysort (T *const array ,int from ,int to) { if (from >= to) return ; int i = from ; int j = to ; T tmp = std::move (array[i]) ; while (true) { while (i < j && tmp < array[j]) j-- ; if (i >= j) break ; array[i++] = std::move (array[j]) ; while (i < j && array[i] < tmp) i++ ; if (i >= j) break ; array[j--] = std::move (array[i]) ; } array[i] = std::move (tmp) ; mysort (array ,from ,i - 1) ; mysort (array ,j + 1 ,to) ; }