Сортировка выбором — различия между версиями
Krotser (обсуждение | вклад) |
Krotser (обсуждение | вклад) |
||
| Строка 20: | Строка 20: | ||
== Пример == | == Пример == | ||
| − | Пусть дана последовательность из <tex> | + | Пусть дана последовательность из <tex>5</tex> элементов <tex>5, 4, 1, 2, 3</tex>. |
{| style="background-color:#CCC;margin:0.5px" | {| style="background-color:#CCC;margin:0.5px" | ||
| − | !style="background-color:#EEE"| | + | !style="background-color:#EEE"| Массив |
| − | |||
!style="background-color:#EEE"| Описание шага | !style="background-color:#EEE"| Описание шага | ||
|- | |- | ||
| − | |colspan=3|''Первый проход ( | + | |colspan=3|''Первый проход (текущий массив начинается с первого элемента)'' |
|- | |- | ||
| − | |style="background-color:#FFF;padding:2px 10px"| ''' | + | |style="background-color:#FFF;padding:2px 10px"| 5 4 '''1''' 2 3 |
| − | |style="background-color:#FFF;padding:2px 10px"| ''' | + | |style="background-color:#FFF;padding:2px 10px"| Находим минимальный элемент {{---}} '''1''' |
| − | |||
|- | |- | ||
| − | | | + | |style="background-color:#FFF;padding:2px 10px"| '''1''' 4 '''5''' 2 3 |
| + | |style="background-color:#FFF;padding:2px 10px"| Меняем минимальный и первый элемент текущего массива | ||
|- | |- | ||
| − | | | + | |colspan=3|''Второй проход (текущий массив начинается со следующего элемента)'' |
| − | |||
| − | |||
|- | |- | ||
| − | |style="background-color:#FFF;padding:2px 10px"| '''2 | + | |style="background-color:#FFF;padding:2px 10px"| 1 5 4 '''2''' 3 |
| − | |style="background-color:#FFF;padding:2px 10px"| '''2 | + | |style="background-color:#FFF;padding:2px 10px"| Находим минимальный элемент {{---}} '''2''' |
| − | |||
|- | |- | ||
| − | | | + | |style="background-color:#FFF;padding:2px 10px"| 1 '''2''' 4 '''5''' 3 |
| + | |style="background-color:#FFF;padding:2px 10px"| Меняем минимальный и первый элемент текущего массива | ||
|- | |- | ||
| − | | | + | |colspan=3|''Третий проход (текущий массив начинается со следующего элемента)'' |
| − | | | ||
| − | |||
|- | |- | ||
| − | |style="background-color:#FFF;padding:2px 10px"| 2 ''' | + | |style="background-color:#FFF;padding:2px 10px"| 1 2 4 5 '''3''' |
| − | |style="background-color:#FFF;padding:2px 10px"| | + | |style="background-color:#FFF;padding:2px 10px"| Находим минимальный элемент {{---}} '''3''' |
| − | |||
|- | |- | ||
| − | |style="background-color:#FFF;padding:2px 10px"| ''' | + | |style="background-color:#FFF;padding:2px 10px"| 1 2 '''3''' 5 '''4''' |
| − | + | |style="background-color:#FFF;padding:2px 10px"| Меняем минимальный и первый элемент текущего массива | |
| − | |style="background-color:#FFF;padding:2px 10px"| | ||
| − | |||
| − | |||
| − | |||
|- | |- | ||
| − | | | + | |colspan=3|''Четвертый проход (текущий массив начинается со следующего элемента)'' |
| − | | | ||
| − | |||
|- | |- | ||
| − | |style="background-color:#FFF;padding:2px 10px"| 2 3 '''4 | + | |style="background-color:#FFF;padding:2px 10px"| 1 2 3 5 '''4''' |
| − | |style="background-color:#FFF;padding:2px 10px"| | + | |style="background-color:#FFF;padding:2px 10px"| Находим минимальный элемент {{---}} '''4''' |
| − | |||
|- | |- | ||
| − | |style="background-color:#FFF;padding:2px 10px"| 2 ''' | + | |style="background-color:#FFF;padding:2px 10px"| 1 2 3 '''4''' '''5''' |
| − | + | |style="background-color:#FFF;padding:2px 10px"| Меняем минимальный и первый элемент текущего массива | |
| − | |style="background-color:#FFF;padding:2px 10px"| | ||
|- | |- | ||
| − | |style="background-color:#FFF;padding:2px 10px"| | + | |style="background-color:#FFF;padding:2px 10px"| 1 2 3 4 5 |
| − | + | |style="background-color:#FFF;padding:2px 10px"| Массив отсортирован | |
| − | |style="background-color:#FFF;padding:2px 10px"| | ||
|} | |} | ||
Версия 23:14, 20 мая 2012
Сортировка выбором (англ. selection sort) — простой алгоритм сортировки со сложностью , где — количество элементов для сортировки.
Содержание
Алгоритм
1. Находим номер минимального элемента из текущего массива.
2. Меняем минимальный элемент с первым элементом массива.
3. Если текущий массив пуст, то данный массив отсортирован. Иначе вернемся к шагу 1, убрав первый элемент из текущего массива.
Реализация
// Входной массив x, содержащий n элементов.
for i = 0 to n - 1
min = i;
for j = i + 1 to n - 1
if x[j] < x[min]
min = j;
swap(x[i], x[min]);
// Массив x отсортирован
Пример
Пусть дана последовательность из элементов .
| Массив | Описание шага | |
|---|---|---|
| Первый проход (текущий массив начинается с первого элемента) | ||
| 5 4 1 2 3 | Находим минимальный элемент — 1 | |
| 1 4 5 2 3 | Меняем минимальный и первый элемент текущего массива | |
| Второй проход (текущий массив начинается со следующего элемента) | ||
| 1 5 4 2 3 | Находим минимальный элемент — 2 | |
| 1 2 4 5 3 | Меняем минимальный и первый элемент текущего массива | |
| Третий проход (текущий массив начинается со следующего элемента) | ||
| 1 2 4 5 3 | Находим минимальный элемент — 3 | |
| 1 2 3 5 4 | Меняем минимальный и первый элемент текущего массива | |
| Четвертый проход (текущий массив начинается со следующего элемента) | ||
| 1 2 3 5 4 | Находим минимальный элемент — 4 | |
| 1 2 3 4 5 | Меняем минимальный и первый элемент текущего массива | |
| 1 2 3 4 5 | Массив отсортирован | |
Ссылки
Литература
- Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгоритмы: построение и анализ, 2-е издание. М.: Издательский дом "Вильямс", 2005. ISBN 5-8459-0857-4