#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;