Обьясните как работает функция
void SortArr(int arr[], int n) {
for (int startIndex = 0; startIndex < n - 1; ++startIndex)
{
int smallestIndex = startIndex;
for (int currentIndex = startIndex + 1; currentIndex < n; ++currentIndex)
{
if (arr[currentIndex] < arr[smallestIndex])
smallestIndex = currentIndex;
}
swap(arr[startIndex], arr[smallestIndex]);
}
}
Ответы (2 шт):
хреново она работает :) сложность алгоритма O(n^2)
функция сортировки массива, алгоритм выглядит так:
проходим по всем элементам массива от
0доn-1для каждой позиции проходим по всем элементам массива от
i+1доn-1находим минимальное значение элемента в этом диапазоне
[i+1, n-1]если найденное минимальное значение меньше значения в позиции
i- меняем их местами
таким образом пройдя полностью на этапе от 0 до n-1 массив будет отсортирован
Единственное, мне кажется не хватает одной проверки все таки
void SortArr(int arr[], int n) {
for (int startIndex = 0; startIndex < n - 1; ++startIndex)
{
int smallestIndex = startIndex;
for (int currentIndex = startIndex + 1; currentIndex < n; ++currentIndex)
{
if (arr[currentIndex] < arr[smallestIndex])
smallestIndex = currentIndex;
}
if (arr[startIndex] < arr[smallestIndex])
swap(arr[startIndex], arr[smallestIndex]);
}
}
Это сортировка массивов методом выбора
Объяснение :
Аргументы функции : целочисленный массив, размер(потому, что массив не запоминает свою длину при передаче в функцию, в отличии от std::array и std::vector)
(n - 1) потому, что последнее сравнение будет самозаменой. Последний элемент уже будет отсортирован к тому времени, когда мы до него дойдем
В переменной smallestIndex храниться индекс наименьшего значения, которое мы нашли в этой итерации.
Затем ищем элемент поменьше в остальной части массива
- startIndex + 1 потому, что отсортированный элемент больше не трогаем
- Если мы нашли элемент, который меньше arr[smallestIndex],то запоминаем его smallestIndex = currentIndex;
- И, с помощью функции std::swap, меняем местами значения