C 中的选择排序未显示正确的输出

Selection Sort in C is not showing the right output

#include <stdlib.h>
#include <stdio.h>


void selection_sort(int array[],int num);

int main(void) {

    int i,num;

    printf("Write the number of elements :");
    scanf("%d",&num);

    int array[100];

    for(i=0;i<num;i++){

        scanf("%d",&array[i]);
    }

    selection_sort(array,num);

    return 0;
}

//Doing selection sort algorithm :

void selection_sort(int array[],int num){

    int i,j,min,temp;

    for (i=0;i<num;i++){

        min=i;

        for(j=i+1;j<num;j++){

            if (array[j]<array[i]){

                min=j;
            }
        }

        if (min!=i){

            temp=array[i];
            array[i]=min;
            min=temp;
        }
    }

    printf("Sorted elements :\n");

    for (i=0;i<num;i++){

        printf("%d\n",array[i]);
    }


}

请告诉我为什么我无法显示已排序的元素

问题在于交换的实现方式。

正确的元素交换方式是:

if (min!=i){

    temp=array[i];
    array[i]=array[min];
    array[min]=temp;
}

查看以下更正后的代码:

#include <stdlib.h>
#include <stdio.h>


void selection_sort(int array[],int num);

int main(void) {

    int i,num;

    printf("Write the number of elements :");
    scanf("%d",&num);

    int array[100];

    for(i=0;i<num;i++){

        scanf("%d",&array[i]);
    }

    selection_sort(array,num);

    return 0;
}

//Doing selection sort algorithm :

void selection_sort(int array[],int num){

    int i,j,min,temp;

    for (i=0;i<num;i++){

        min=i;

        for(j=i+1;j<num;j++){

            if (array[j]<array[i]){

                min=j;
            }
        }

        if (min!=i){

            temp=array[i];
            array[i]=array[min];
            array[min]=temp;
        }
    }

    printf("Sorted elements :\n");

    for (i=0;i<num;i++){

        printf("%d\n",array[i]);
    }


}