有关快速排序的问题

C++语言 码拜 9年前 (2016-04-01) 938次浏览
这是本人写的一个快速排序的程序,但是运行后还是按原序输出,感觉是参数没能传进去,麻烦大家帮忙指点一下啊
#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];
}
给你描红加粗了~
有问题的时候断点调试吧~~~

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) ;
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明有关快速排序的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)