[英]Having Trouble With Shell Sort in C, Infinite Looping
我的程序的一小部分出现了问题,该程序会生成一个随机数列表,然后对它们进行shell排序,现在它无法完成计算,这使我认为循环还没有完成。 我遇到了分段错误错误,但是通过解决一些有关如何访问阵列的问题,我设法解决了该问题。 无论如何,新鲜的眼睛可能对我有益。
谢谢!
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
printf("How long would you like to make the list? \n");
int list_length;
scanf("%d", &list_length);
int *number_list[list_length];
int random_number;
int i;
for(i=0; i<list_length; i++){
srand ( time(NULL) );
random_number = rand();
number_list[i] = random_number;
}
printf("Before: ");
printf("%d", &number_list[0]);
printf("\n");
shellSort(*number_list, list_length);
printf("After: ");
printf("%d", &number_list[0]);
printf("\n");
return 0;
}
void shellSort(int *A, int n){
int gap , i , j , temp;
for (gap = n/2; gap>0; gap /=2)
for (i=gap; i<n; i++)
for(i = i-gap; j>=0 && &A[j] > &A[j+gap]; j-=gap){
temp = &A[j];
A[j] = &A[j + gap];
A[j + gap] = temp;
}
}
也许您应该在这一行中使用j
而不是i
:
for(j = i-gap; j>=0 && &A[j] > &A[j+gap]; j-=gap) // <- first i is replaced by j
// ^
// Here
在for(i = i-gap; j>=0 && &A[j] > &A[j+gap]; j-=gap){
您正在初始化i
,但是递减并检查j
。 您应该将赋值运算符的左侧从i
更改为j
。
您的代码甚至不应该编译。 您将number_list
声明为指向int
的指针数组,然后将其分配为int
。 您也不能在C89中声明非恒定大小的数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.