На языке C, почему мой код сортировки выбором не работает

Я написал алгоритм сортировки выбором, но он не работал. Я не могу найти свою ошибку. Кто-нибудь может мне помочь?

#include ‹stdio.h›

int main () {
    
    int array[100],i,j,position,size,swap;
    
    printf("Enter number of integers\n");
    scanf("%d",&size);
    printf("Enter %d integers\n",size);
    for(i=0;i<size;i++){
        scanf("%d",&array[i]);
    }
    
    for(i=0;i<size;i++){
        position=i;
            for(j=i;j<size;j++){
                if(array[position]>array[j]){
                    position=j;
                    
                }
                if(position!=i){
                    swap=array[i];
                    array[i]=array[position];
                    array[position]=swap;
                }
            }   
    }
    printf("Sorted list in ascending order\n");
    for(i=0;i<size;i++){
        printf("%d\n",array[i]);
    }
    
    return 0;
}

person infamora    schedule 20.10.2020    source источник
comment
Не работает - это не техническая диагностика. Вам нужно копнуть немного глубже и объяснить, что он делает, что нежелательно, и/или что он должен делать. Вы прошли через отладчик?   -  person tadman    schedule 20.10.2020
comment
Переместите часть подкачки после внутреннего цикла.   -  person Johnny Mopp    schedule 20.10.2020
comment
извините, хорошо, я редактирую   -  person infamora    schedule 20.10.2020
comment
Используется пост-ввод. Вывод виден. Ожидаемый результат.   -  person chux - Reinstate Monica    schedule 21.10.2020


Ответы (1)


Алгоритм сортировки выбором сортирует массив, многократно находя минимальный элемент (с учетом возрастания) из несортированной части и помещая его в начало.

Таким образом, обмен должен произойти после того, как вы нашли правильную позицию, то есть после завершения цикла for. Поэтому, если вы переключите блок if после завершения цикла j, код должен работать.

for(i=0;i<size;i++){
position=i;
    for(j=i;j<size;j++){
        if(array[position]>array[j]){
            position=j;
        }
    }  
    if(position!=i){
            swap=array[i];
            array[i]=array[position];
            array[position]=swap;
        }
}
person algo_user    schedule 20.10.2020
comment
Оу, я понял, чувак, большое спасибо. Я думаю о 2 часах. Большое тебе спасибо - person infamora; 20.10.2020