簡體   English   中英

C中數組排序算法中的段錯誤

[英]Segfault error in array sorting algorithm in C

我是編程的初學者,並且正在研究KNKing的“ C編程:一種現代方法”。 現在,我正在嘗試進行第9章的編程項目1,但我一直遇到段錯誤,並且不確定代碼出了什么問題。 任何更正表示贊賞!

這些是說明:

編寫一個程序,要求用戶輸入一系列整數(將其存儲在數組中),然后通過調用函數selection_sort對整數進行排序。 當給定一個包含n個元素的數組時,selection_sort必須執行以下操作:
1.搜索數組以找到最大的元素,然后將其移至數組的最后位置。
2.遞歸調用自身以對數組的前n-1個元素進行排序。

這是我的代碼:

#include <stdio.h>

void selection_sort(int n, int a[n]);

int main(void)
{
    int n;

    printf("Number of integers to sort: ");
    scanf("%d", &n);

    int a[n];

    printf("Enter the integers: ");
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }

    selection_sort(n, a);

    printf("Sorted array: ");
    for (int i = 0; i < n; i++)
        printf("%d", a[i]);

    return 0;
}

void selection_sort(int n, int a[n])
{
    int swap, max = a[n - 1];

    for (int i = 0; i < n; i++) {
        if (a[i] > max) {
            max = a[i];
            swap = a[n - 1];
            a[n - 1] = max;
            a[i] = swap;
        }
    }
    if (n > 1)
        selection_sort(n - 1, a);
}

編輯:從(n> 1)更改為if(n> 1),現在可以正常使用了。 但是為什么它一段時間不起作用?

您需要不調用selection_sort的條件。 現在,您的selection_sort 始終會調用selection_sort ,這將導致無限循環。

而且,由於在每一步中遞減n ,所以在某一點它變為負數,然后開始訪問a[-1] ,這是錯誤的。

您需要為遞歸提供一些基本條件,以避免無休止地調用相同的函數。您可以執行類似的操作

void selection_sort(int n, int a[])
{
    if(n<=0)return;  //base condition
    int swap, max = a[n - 1];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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