繁体   English   中英

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

[英]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]);
    }


}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM