快速排序结果错误?

#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甚至要输入两次还是错的!!为什么?

bigmathbase
浏览 1412回答 1
1回答

Camel97

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