2013-03-04 79 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中聲明非常量大小的數組。