马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
下面是我第一次写快速排序算法时写出的代码,其中有一个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[i]<center){
i++;
}
while(num[j]>center){
j--;
}
if(i<j){
int tmp=num[i];
num[i]=num[j];
num[j]=tmp;
}else{
int h=0;
while(h<len){
if(num[h]==center){
break;
}
h++;
}
quick_sort(num,h);
quick_sort(&num[h],len-h);
break;
}
}
}
int main(){
int num[]={0,6,5,3,1,2,4};
for(int i=0;i<7;i++){
printf("%d ",num[i]);
}
puts("\n");
quick_sort(num,sizeof(num)/sizeof(int));
for(int i=0;i<7;i++){
printf("%d ",num[i]);
}
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[i]<center) i++;
while(num[j]>center) j--;
if(i<j){
int tmp=num[i];
num[i]=num[j];
num[j]=tmp;
i++;
j--;
}else{
quick_sort(num,i);
quick_sort(&num[i],len-i);
break;
}
}
}
int main(){
int num[]={3,6,9,5,1,2,4};
for(int i=0;i<7;i++) printf("%d ",num[i]);
puts("\n");
quick_sort(num,sizeof(num)/sizeof(int));
for(int i=0;i<7;i++) printf("%d ",num[i]);
putchar('\n');
}
|