这是本人写的一个快速排序的程序,但是运行后还是按原序输出,感觉是参数没能传进去,麻烦大家帮忙指点一下啊
#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) ;
}