C插入排序程序因许多输入而失败
嗨 我是C语言的新手,在对一组数字进行排序时遇到了困难 如果我输入'53095',它将正确返回95530 然而,“53 00 9 9 10 11 13 14 9”并没有返回任何东西。一些调试显示它到达3,然后停止 我应该从哪里开始寻找 以下是我的代码,但一般建议可以:C插入排序程序因许多输入而失败,c,arrays,sorting,C,Arrays,Sorting,嗨 我是C语言的新手,在对一组数字进行排序时遇到了困难 如果我输入'53095',它将正确返回95530 然而,“53 00 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()
#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;
}
#包括
#包括
int getvals(int A[]);
无效val_掉期(int*a,int*b);
int main(){
int len=0;
国际VAL[len];
len=获取VAL(VAL);
int i=0,j=0;
/*从头到尾搜索这些值*/
对于(;i=0&&vals[j+1]>vals[j];j--){
/*交换*/
val_掉期(&val[j],&val[j+1]);
}
}
/*打印已排序的数组*/
int k=0;
对于(;k
可能getvals的返回值小于'5 3 0 0 9 9 10 11 13 14 9'的数量,因此数据太多
但是我想知道当len为0时,它是否能通过编译int-vals[len],我们不说这是否正确,但是vals的大小已经固定,因为vals的空间在堆栈中,没有堆
所以在我看来,没有足够的空间来运行这个程序 在
int len=0之后,您希望在vals[]
中有多大尺寸;国际VAL[len];len=获取VAL(VAL)代码>?在哪里调整VAL阵列的大小?它的长度为零。你知道使用malloc()
和free()
,即动态内存分配吗?你的scanf
也是错误的,因为它允许在EOF条件下继续(该条件scanf
可以返回,并且不等于零,仅供参考。)@Yunnosch Oops!谢谢,我修好了!(C数组很奇怪dd)这是正确的。我正在访问我无法访问的内存位置。VAL[1000]工作正常!祝贺