Почему сортировка вставки перестает работать в этом случае?

#c #algorithm #sorting #insertion-sort

#c #алгоритм #сортировка #вставка-сортировка

Вопрос:

В функции InsertionSort я определил переменную temp, которая эквивалентна arr[i] . Для следующего цикла while я написал несколько условий, одним из которых является temp < arr[j]), этот код работает отлично. НО если я заменю этот temp на arr[i] в условии [т.е. while(j >= 0 amp;amp; arr[i] <arr[j]) ], этот код работает так, как задумано. Почему это происходит, разве значения переменных temp и arr [i] не совпадают, как определено на 2 строки выше?

С while(j >= 0 amp;amp; arr[i] <arr[j]) это не работает.
неправильно

С while(j >= 0 amp;amp; temp < arr[j]) это работает.
правильно

 #include<iostream>

void printSortedArray(int arr[], int size){
    std::cout<<"{ ";
    for(int m=0; m<size-1;   m){
    std::cout<<arr[m]<<", ";
    }
    std::cout<<arr[size-1]<<" ";
    std::cout<<"}";
}

void insertionSort(int arr[], int size){
for(int i=1; i<size;   i){
    int temp = arr[i];                     //  <---- Variable *temp* ----
    int j = i - 1;
    while(j >= 0 amp;amp; temp < arr[j]){        //  <---- *while loop*----
        arr[j 1] = arr[j];
        --j;
    }
    arr[j 1] = temp;
}

printSortedArray(arr, size);
}

int main(){
int n; std::cout<<"Enter the size of array : ";
std::cin>>n;

int arr[n];

for(int i=0; i<n;   i){
    std::cout<<"Enter the element at index ~ "<<i<<" : ";
    std::cin>>arr[i];
}

insertionSort(arr, n);
}
 

Комментарии:

1. 1) Почему изображения вместо скопированного текста? 2) Вы выполнили свой код с помощью отладчика, чтобы увидеть, в чем разница между этими 2 случаями?

Ответ №1:

Условие цикла должно быть while (j > 0 amp;amp; temp < arr[j]) и конец arr[j] = temp; вместо arr[j 1] = temp;