Выборочная сортировка некорректно - PullRequest
1 голос
/ 14 марта 2020

Я писал сортировку выбора, и она не сортируется должным образом, иногда она работает, но в большинстве случаев одно или два числа неуместны. Предполагается распечатать массив чисел, отсортировать эти числа, а затем распечатать их снова. Он работает в режиме отладки, но всякий раз, когда я запускаю его регулярно, именно тогда начинаются проблемы.

Примечание. Если вам интересно, почему в начале есть какое-то время l oop, это потому что я буду работать над его повторением позже.

Код:

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

int print(int array[4]);

int main(void)
{

    bool loop = true;
    //main loop
    while (loop)
    {
        //array
        int array[5];

        //assign numbers
        int seconds= time(NULL);
        printf("%d\n", seconds);
        srand(seconds);
        for(int i = 0; i <= 4; i++)
        {
            //random number between 0 and 5
            int r = rand();
            array[i] = r % 6;
        }
        //print numbers
        for(int i = 0; i <= 4; i++)
        {
            printf("%d ", array[i]);
        }
        printf("\n");

        //sort 
        int temp;
        for(int i = 0; i <= 4; i++)
        {
            //set minimum
            int min = array[i];
            //check minimum value
            for(int j = i + 1; j <= 4; j++)
            {
                if(min > array[j])
                {
                    min = array[j];
                    temp = j;
                }
            }

            //swap minimum values
            int first = array[i];
            array[i] = min;
            array[temp] = first;
        }
        for(int i = 0; i <= 4; i++)
        {
            printf("%d ", array[i]);
        }
        printf("\n");
        return 0;
    }
}

int print(int array[4])
{
    return 0;
}

Пример вывода:

1584216938
3 5 1 4 1 
1 1 3 3 4

1 Ответ

1 голос
/ 15 марта 2020

Внутри внешнего for l oop вы устанавливаете начальное минимальное значение int min = array[i];, но вы забываете устанавливать индекс начального минимального значения (хранится в temp).

Это приводит к неожиданному поведение в случае, если условие if(min > array[j]) не выполняется во внутреннем for l oop.

Исправление тривиально:

        //set minimum
        int min = array[i];
        temp = i; // <---------
...