簡體   English   中英

在C中有Shell排序問題,無限循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM