SELECT SORT - моя собственная версия сортировки - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь создать свой собственный алгоритм сортировки выборок. Но почему-то этот алгоритм останавливается на втором последнем элементе. Может ли кто-нибудь помочь мне понять, почему мой вид не включает последние 2 элемента.

void selection_sort(int a[],int size)
{
    int start = -1;
    int fin_index;
    int smallest;
    while(start<=size)
    {
        start++;
        fin_index = start;
        int smallest_elem = a[start];
        for(int i=start;i<size;i++)
        {
            if(a[i]<smallest_elem)
            {
            smallest_elem = a[i];
            smallest = i;
            }
        }
        swap(a[fin_index],a[smallest]);
    }
}

1 Ответ

0 голосов
/ 03 февраля 2020

Вы не инициализировали «наименьшую» переменную до ввода «для» l oop.

Инициализируйте ее как fin_index: smallest = fin_index

Если элемент уже в отсортированной позиции он будет заменен предыдущим значением наименьшее.

Кроме того, ваше время l oop работает size+2 раз. В то время как l oop должен работать только самое большее size раз, поскольку мы хотим, чтобы минимум только size раз.

Эти две ошибки приводят к сбою реализации.

...