为了账号安全,请及时绑定邮箱和手机立即绑定

快速排序结果错误?

快速排序结果错误?

C
bigmathbase 2017-08-12 11:14:14
#include <stdio.h> #include <stdlib.h> int numbers[],size; void C_sort(int L,int R){     int L_arrow,R_arrow,box;     if(L>R){         return;     }     box=numbers[L];     L_arrow=L;R_arrow=R;     while(L_arrow!=R_arrow){         while(numbers[R_arrow]>=box){             if(L_arrow<R_arrow){                 R_arrow--;             } else {                 break;             }         }         while(numbers[L_arrow]<=box){             if(L_arrow<R_arrow){                 L_arrow++;             } else {                 break;             }         }         if(L_arrow<R_arrow){             numbers[L_arrow]=numbers[L_arrow]+numbers[R_arrow];             numbers[R_arrow]=numbers[L_arrow]-numbers[R_arrow];             numbers[L_arrow]=numbers[L_arrow]-numbers[R_arrow];         }     }     numbers[L]=numbers[L_arrow];     numbers[L_arrow]=box;     C_sort(L,L_arrow-1);     C_sort(L_arrow+1,R); } int main() {     int i;     scanf("%d",&size);     for(i=1;i<=size;i++)scanf("%d",&numbers[i]);     for(i=1;i<=size;i++)printf("%d",numbers[i]);//测试代码,此时输出已不正常     C_sort(1,size);     for(i=1;i<=size;i++)printf("%d",numbers[i]);     system("pause");     return 0; }就这个,编译倒没问题,运行的时候,错误非常随机,比如98765甚至要输入两次还是错的!!为什么?
查看完整描述

1 回答

已采纳
?
Camel97

TA贡献49条经验 获得超38个赞

第一个。哪有数组是像这样定义的。数组定义的时候必须指明长度。
第二个。你输入的size应该是表示数组的大小。那数组的下标应该是8到size-1不是从1到size
第三个。学会debug找错误,这也是编程的一个能力。如果算法代码不是自己写的那好好查错更能理解一个算法。实在不行用printf把值打出来看哪里错了。
第四个。虽然算法很重要。还是建议先把基础打牢。

查看完整回答
反对 回复 2017-08-13
  • bigmathbase
    bigmathbase
    嗯,查了资料,发现我语法搞错了。size-1的那个我发现了。
  • 1 回答
  • 0 关注
  • 1368 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信