|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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');
- }
复制代码 |
|