Сортировка выбора в C не показывает правильный вывод - PullRequest
0 голосов
/ 25 апреля 2020
#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]);
    }


}

, пожалуйста, дайте мне знать, почему я не могу отобразить отсортированные элементы

1 Ответ

0 голосов
/ 25 апреля 2020

Проблема была в части, как реализован обмен.

Правильный способ обмена элементами:

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


}
...