2013-03-04 74 views
1

我遇到了一小部分问题,它使得随机数列表出现,然后shell将它们排序,现在它不会完成计算,这让我想到该循环没有完成。我得到了分段错误的错误,但我设法解决了一些问题,我如何访问我的数组。无论如何,一套新的眼睛可能对我有好处。遇到问题外壳排序在C,无限循环

谢谢!

#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; 
     } 
} 
+1

你意识到你正在存储int到一个指针数组吗? – Mike 2013-03-04 14:14:33

回答

3

也许你应该在这条线使用j代替i

for(j = i-gap; j>=0 && &A[j] > &A[j+gap]; j-=gap) // <- first i is replaced by j 
// ^
// Here 
+0

谢谢!有时很难看到像这样的小事 – 2013-03-04 14:01:05

1

在此行 for(i = i-gap; j>=0 && &A[j] > &A[j+gap]; j-=gap){要初始化i,但是你递减,并检查j。您应该将赋值运算符的左侧从i更改为j

+0

非常感谢!有效 – 2013-03-04 14:01:24

1

你的代码甚至不应该编译。您声明number_list作为指向int的指针数组,但随后将其指定为int。你也不能在C89中声明非常量大小的数组。