Этот тип сортировки называется « Выбор сортировки», так как он работает путем многократной сортировки элементов. Он работает следующим образом: сначала найдите наименьшее в массиве и обменяйте его с элементом в первой позиции, затем найдите второй наименьший элемент и обменяйте его на элемент во второй позиции, и продолжайте таким образом, пока весь массив не будет отсортирован.
Algorithm: Selection-Sort (A) fori ← 1 to n-1 do min j ← i; min x ← A[i] for j ←i + 1 to n do if A[j] < min x then min j ← j min x ← A[j] A[min j] ← A [i] A[i] ← min x
Сортировка выбора является одним из самых простых методов сортировки, и она очень хорошо работает для небольших файлов. Он имеет довольно важное применение, поскольку каждый элемент перемещается не более одного раза.
Раздел сортировки — это метод выбора файлов с очень большими объектами (записями) и маленькими ключами. Наихудший случай возникает, если массив уже отсортирован в порядке убывания, и мы хотим отсортировать их в порядке возрастания.
Тем не менее, время, требуемое алгоритмом сортировки выбора, не очень чувствительно к исходному порядку сортируемого массива: проверка, если A [j] < min x , выполняется точно одинаковое количество раз в каждом случае.
Сортировка выбора тратит большую часть своего времени, пытаясь найти минимальный элемент в несортированной части массива. Это ясно показывает сходство между сортировкой Selection и Bubble.
-
Пузырьковая сортировка выбирает максимальное количество оставшихся элементов на каждом этапе, но затрачивает некоторые усилия на наложение некоторого порядка на несортированную часть массива.
-
Сортировка выбора является квадратичной как в худшем, так и в среднем случае, и не требует дополнительной памяти.
Пузырьковая сортировка выбирает максимальное количество оставшихся элементов на каждом этапе, но затрачивает некоторые усилия на наложение некоторого порядка на несортированную часть массива.
Сортировка выбора является квадратичной как в худшем, так и в среднем случае, и не требует дополнительной памяти.
Для каждого i от 1 до n — 1 существует один обмен и n — i сравнений, таким образом, имеется в общей сложности n — 1 обменов и
(n — 1) + (n — 2) + … + 2 + 1 = n (n — 1) / 2 сравнения.
Эти наблюдения верны, независимо от того, что входные данные.
В худшем случае это может быть квадратично, но в среднем это количество равно O (n log n) . Это означает, что время выполнения сортировки Selection довольно нечувствительно к вводу .
Реализация
Void Selection-Sort(int numbers[], int array_size) { int i, j; int min, temp; for (i = 0; I < array_size-1; i++) { min = i; for (j = i+1; j < array_size; j++) if (numbers[j] < numbers[min]) min = j; temp = numbers[i]; numbers[i] = numbers[min]; numbers[min] = temp; } }
пример
Несортированный список: |
|
Несортированный список:
1- я итерация:
Наименьший = 5
2 <5, самый маленький = 2
1 <2, самый маленький = 1
4> 1, наименьшее = 1
3> 1, наименьшее = 1
Поменяйте местами 5 и 1 |
|
Поменяйте местами 5 и 1
2- я итерация:
Наименьший = 2
2 <5, самый маленький = 2
2 <4, самый маленький = 2
2 <3, самый маленький = 2
Нет своп |
|
Нет своп
3- я итерация:
Наименьший = 5
4 <5, самый маленький = 4
3 <4, самый маленький = 3
Поменяйте местами 5 и 3 |
|
Поменяйте местами 5 и 3
4- я итерация:
Наименьший = 4
4 <5, самый маленький = 4
Нет своп |
|
Нет своп
В заключение,
отсортированный список