Нужна помощь в понимании методов, использованных в этом примере кода, из Прыжки в C ++ на сортировку массивов. На этом этапе автор переходит от основ передачи массивов к функциям к этому, и шаги не ясны. Если что-нибудь может кто-нибудь помочь объяснить, что происходит в функциях findSmallestRemainingElement () и swap ()? И что происходит с индексом? Это всевозможные запутанные миры. Я чувствую, что мне нужно начать все сначала.
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int findSmallestRemainingElement (int array[], int size, int index);
void swap (int array[], int first_index, int second_index);
void sort (int array[], int size)
{
for (int i = 0; i < size; i++)
{
int index = findSmallestRemainingElement (array, size, i); //Why are there not [] for array here?
swap (array, i, index);
}
}
int findSmallestRemainingElement (int array[], int size, int index)
{
int index_of_smallest_value = index;
for (int i = index + 1; i < size; i++)
{
if (array[i] < array[index_of_smallest_value])
{
index_of_smallest_value = i;
}
}
return index_of_smallest_value;
}
void swap (int array[], int first_index, int second_index)
{
int temp = array[first_index];
array[first_index] = array[second_index];
array[second_index] = temp;
}
void displayArray (int array[], int size)
{
cout << "{";
for (int i = 0; i < size; i++)
{
if (i != 0)
{
cout << ", ";
}
cout << array[i];
}
cout << "}";
}
int main()
{
int array[10];
srand(time(NULL));
for (int i = 0; i < 10; i++)
{
array[i] = rand() % 100;
}
cout << "Original array: ";
displayArray(array, 10);
cout << "\n";
sort(array, 10);
cout << "Sorted array: ";
displayArray(array, 10);
cout << "\n";
}
Позвольте мне попытаться объяснить, используя пример из реальной жизни.
Допустим, вы хотели найти самого тяжелого ребенка в своем классе (вроде как я знаю). Проблема в том, что у вас действительно плохая память (вы можете помнить только один вес детей за раз). Как бы вы это сделали?
Ну, во-первых, давайте выстроим в ряд всех детей в вашем классе и нарисуем число на их лбу (их индекс). Первый ребенок с индексом 0, до последнего ребенка с индексом n. Это в основном ваш массив.
Но число на лбу не говорит вам вес детей … очевидно. Для этого вам нужны весы. Итак, чтобы «посмотреть» вес каждого ребенка, вы называете его индексный номер, они наступают на весы, и вы получаете их вес. Это доступ к элементам массива через индексный номер.
Ну и что дальше? Ну … весят ребенка «0». Он самый тяжелый до сих пор? Ну, он первый ребенок, так что, очевидно, да. Так что помните индекс «0» в вашей голове.
Теперь позвоните следующему пронумерованному ребенку (ребенок ‘1’) и получите доступ к его весу, заставив его встать на весы. При этом взвесьте ребенка, номер которого вы запомнили (ребенок «0») по второй шкале. Если вес нового ребенка выше, чем у ребенка, которого вы помните, тогда забудьте о индексе старого ребенка и запомните индекс нового ребенка.
Продолжайте делать это до тех пор, пока не пройдете через всех детей, затем выпалите номер ребенка, которого вы помните. Это функция возврата.
Я оставлю кого-то еще отвечать за функцию «своп».
Других решений пока нет …