为什么这段代码会在选择排序时产生细分错误,请解释

时间:2018-07-21 07:28:37

标签: c sorting selection

为什么会产生细分错误,请向某人解释,我是竞争编程的新手,我自己找不到错误

这是选择排序的代码:

#include<stdio.h>

void swap(int *xp ,int *yp)
{
    int temp = *xp;
    *xp = *yp;
    *yp = temp; 
}

void SelectionSort(int* A , int n)
{
    int i ,j ,imin;
    for(i =0 ; i<n-1;i++)
    {   
        imin =i;
        for (j =i+1;i<n;j++)
        {
            if (A[j] < A[imin])
            imin =j;
        }
        swap(&A[imin],&A[i]);

    }
}
int main()
{
    int A[]= {1,2,5,8,44,5,7,9,6};
    int n = sizeof(A)/sizeof(A[0]);
    SelectionSort(A,n);
    printf("start printing:");

    for(int i = 0;i<6 ;i++)
    {           
        printf(" output is %d  ",A[i]);
    }
}

2 个答案:

答案 0 :(得分:2)

您在for中的内部SelectionSort循环出现问题:

for (j =i+1;i<n;j++)

表示您从未测试过j。试试:

for (j = i+1; j < n; j++)

答案 1 :(得分:0)

in用于在此表达式中的j =i+1;i<n;j++处使用i的循环条件匹配j中的1,则循环将沿相反方向运行。