Обьясните как работает функция

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 шт):

Автор решения: Zhihar

хреново она работает :) сложность алгоритма O(n^2)

функция сортировки массива, алгоритм выглядит так:

  1. проходим по всем элементам массива от 0 до n-1

  2. для каждой позиции проходим по всем элементам массива от i+1 до n-1

  3. находим минимальное значение элемента в этом диапазоне [i+1, n-1]

  4. если найденное минимальное значение меньше значения в позиции 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]);
    }
}
→ Ссылка
Автор решения: ТарасПрограммер

Это сортировка массивов методом выбора

Объяснение :

  1. Аргументы функции : целочисленный массив, размер(потому, что массив не запоминает свою длину при передаче в функцию, в отличии от std::array и std::vector)

  2. (n - 1) потому, что последнее сравнение будет самозаменой. Последний элемент уже будет отсортирован к тому времени, когда мы до него дойдем

  3. В переменной smallestIndex храниться индекс наименьшего значения, которое мы нашли в этой итерации.

Затем ищем элемент поменьше в остальной части массива

  1. startIndex + 1 потому, что отсортированный элемент больше не трогаем
  2. Если мы нашли элемент, который меньше arr[smallestIndex],то запоминаем его smallestIndex = currentIndex;
  3. И, с помощью функции std::swap, меняем местами значения
→ Ссылка