大家一起来找茬——快速排序算法
下面是我第一次写快速排序算法时写出的代码,其中有一个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]