同样的程序给了我不同的输出

时间:2018-03-01 01:35:38

标签: c recursion segmentation-fault selection-sort

我试图制作选择排序的递归版本。它尚未完成。我只设法找到最小元素的索引。当我运行我的程序有时它工作正常并输出正确的值,但有时它给了我" 1869833334"由于某种原因后面出现了分段错误,我无法弄清楚原因。

#include <stdio.h>

int MaxInd(int arr[], int i, int len, int max, int index){
    if (arr[i]>max){
        max=arr[i];
        index=i;
    }

    if(i==len-1){
        return index;
    }

    index = MaxInd(arr,i+1,len,max,index);
    printf("%d\n", index);
    return index;
}

int SelectionSort(int arr[], int len){
int index,max,i;
int k = MaxInd(arr, i, len, max, index);
}

int main(void){
    int arr[6] = {1,4,5,0,9,2};
    int len=sizeof(arr)/sizeof(arr[0]);
    int var=SelectionSort(arr, len);
    printf("final index is: %d\n",var);
}

1 个答案:

答案 0 :(得分:4)

int SelectionSort(int arr[], int len){
    int index,max,i;
    int k = MaxInd(arr, i, len, max, index);
}

indexmaxi未初始化,您从中获得的结果是 每次都不一样,因为它是未定义的behvaiour。

另外

int MaxInd(int arr[], int i, int len, int max, int index){
    if (arr[i]>max){
        max=arr[i];
        index=i;
    }
    ...

在尝试访问i < len之前,您应该检查arr[i],否则 您可以访问超出arr的限制。你应该先检查一下 访问值:

int MaxInd(int arr[], int i, int len, int max, int index){
    if(i==len-1){
        return index;
    }

    if (arr[i]>max){
        max=arr[i];
        index=i;
    }

    ...