cnjn 发表于 2019-11-15 18:20:01

大家一起来找茬——快速排序算法

下面是我第一次写快速排序算法时写出的代码,其中有一个BUG;有兴趣的朋友可以试试排错。


虽然这段代码可以正常执行,但确实有一个bug哦
#include<stdio.h>
void quick_sort(int *num,int len){
        if(len<2) return;
        int center=num[(len%2+len)/2],i=0,j=len-1;
        while(1){
                i=0;
                j=len-1;
                while(num<center){
                        i++;
                }
                while(num>center){
                        j--;
                }
                if(i<j){
                        int tmp=num;
                        num=num;
                        num=tmp;
                }else{
                        int h=0;
                        while(h<len){
                                if(num==center){
                                        break;
                                }
                                h++;
                        }
                        quick_sort(num,h);
                        quick_sort(&num,len-h);
                        break;
                }
        }
}
int main(){
        int num[]={0,6,5,3,1,2,4};
        for(int i=0;i<7;i++){
                printf("%d ",num);
        }
        puts("\n");
        quick_sort(num,sizeof(num)/sizeof(int));
        for(int i=0;i<7;i++){
                printf("%d ",num);
        }
        putchar('\n');

}


另附上我修改后的代码:

#include<stdio.h>
void quick_sort(int *num,int len){
        if(len<2) return;
        int center=num[(len%2+len)/2],i=0,j=len-1;
        while(1){
                while(num<center) i++;
                while(num>center) j--;
                if(i<j){
                        int tmp=num;
                        num=num;
                        num=tmp;
                        i++;
                        j--;
                }else{
                        quick_sort(num,i);
                        quick_sort(&num,len-i);
                        break;
                }
        }
}
int main(){
        int num[]={3,6,9,5,1,2,4};
        for(int i=0;i<7;i++) printf("%d ",num);
        puts("\n");
        quick_sort(num,sizeof(num)/sizeof(int));
        for(int i=0;i<7;i++) printf("%d ",num);
        putchar('\n');

}
页: [1]
查看完整版本: 大家一起来找茬——快速排序算法