C插入排序程序因许多输入而失败

时间:2018-08-19 05:37:01

标签: c arrays sorting

Heyo!

我是C语言的新手,遇到了一堵砖墙,试图对一组数字进行排序。

如果我输入'5 3 0 9 5',它将正确返回9 5 5 3 0。

但是,“ 5 3 0 0 9 9 10 11 13 14 9”不会返回任何值。一些调试显示它到达3,然后停止。

我应该从哪里开始寻找?

这是我的代码,但一般建议是可以的:

#include <stdio.h>
#include <stdlib.h>

int getvals(int A[]);
void val_swap(int *a,int *b);

int main() {
    int len = 0;
    int vals[len];

    len = getvals(vals);

    int i = 0, j = 0;
    /* Search through the values from start to finish */
    for (; i < len; i++) {
        /* Search back through the values, right to left. If we find a smaller value, swap. */
        for (j = i-1; j >= 0 && vals[j+1] > vals[j]; j--) {
            /* Swap */
            val_swap(&vals[j], &vals[j+1]);
        }
    }

    /* Print the sorted array */
    int k = 0;
    for (; k < len; k++) {
        printf("%d ", vals[k]);
    }

    return 0;
}

int getvals(int A[]) {
    /* Gets a list of integer values from the user */ 
    int num, arr_len = 0;
    printf("Enter numbers. CTRL + D to end: ");
    while(scanf("%d", &num)) {
        A[arr_len] = num;
        arr_len++;
    }
    return arr_len;
}

void val_swap(int *a, int *b) {
    int tmp;
    /* Save the value of b to temp var */
    tmp = *b;
    /* Swap the pointer values */
    *b = *a;
    /* Reassign value */
    *a = tmp;
}

1 个答案:

答案 0 :(得分:0)

也许getvals的返回值小于'5 3 0 0 9 9 10 11 13 14 9 9'的数量,所以数据很多。

但是我想知道是否可以通过int vals [len]编译,当len为0时,我们不能说这是否正确,但是vals的大小已经固定,因为vals的空间在堆栈,没有堆。

因此,我认为没有足够的空间来运行该程序。