Сортировка выбором — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 2: Строка 2:
  
 
== Алгоритм ==
 
== Алгоритм ==
1. Находим номер минимального элемента из текущего массива.
+
На каждом <tex>i</tex>-ом шаге алгоритма находим <tex>i</tex>-ый минимальный элемент и меняем его местами с <tex>i</tex>-ым элементом в массиве. Таким образом, будет получен массив отсортированный по неубыванию.
 
 
2. Меняем минимальный элемент с первым элементом массива.
 
 
 
3. Если текущий массив пуст, то данный массив отсортирован. Иначе вернемся к шагу 1, убрав первый элемент из  текущего массива.
 
  
 
== Реализация ==
 
== Реализация ==
Строка 29: Строка 25:
 
|-
 
|-
 
|style="background-color:#FFF;padding:2px 10px"| 5 4 '''1''' 2 3
 
|style="background-color:#FFF;padding:2px 10px"| 5 4 '''1''' 2 3
|style="background-color:#FFF;padding:2px 10px"| Находим минимальный элемент {{---}} '''1'''  
+
|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"| '''1''' 4 '''5''' 2 3
|style="background-color:#FFF;padding:2px 10px"| Меняем минимальный и первый элемент текущего массива
+
|style="background-color:#FFF;padding:2px 10px"| Меняем минимальный и первый элемент
 
|-
 
|-
 
|colspan=3|''Второй проход (текущий массив начинается со следующего элемента)''
 
|colspan=3|''Второй проход (текущий массив начинается со следующего элемента)''
 
|-
 
|-
 
|style="background-color:#FFF;padding:2px 10px"| 1 5 4 '''2''' 3
 
|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"| 1 '''2''' 4 '''5''' 3
|style="background-color:#FFF;padding:2px 10px"| Меняем минимальный и первый элемент текущего массива
+
|style="background-color:#FFF;padding:2px 10px"| Меняем минимальный и второй элемент
 
|-
 
|-
 
|colspan=3|''Третий проход (текущий массив начинается со следующего элемента)''
 
|colspan=3|''Третий проход (текущий массив начинается со следующего элемента)''
 
|-
 
|-
 
|style="background-color:#FFF;padding:2px 10px"| 1 2 4 5 '''3'''
 
|style="background-color:#FFF;padding:2px 10px"| 1 2 4 5 '''3'''
|style="background-color:#FFF;padding:2px 10px"| Находим минимальный элемент {{---}} '''3'''  
+
|style="background-color:#FFF;padding:2px 10px"| Находим следующий минимальный элемент {{---}} '''3'''  
 
|-
 
|-
 
|style="background-color:#FFF;padding:2px 10px"| 1 2 '''3''' 5 '''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"| Меняем минимальный и третий элемент
 
|-
 
|-
 
|colspan=3|''Четвертый проход (текущий массив начинается со следующего элемента)''
 
|colspan=3|''Четвертый проход (текущий массив начинается со следующего элемента)''
 
|-
 
|-
 
|style="background-color:#FFF;padding:2px 10px"| 1 2 3 5 '''4'''
 
|style="background-color:#FFF;padding:2px 10px"| 1 2 3 5 '''4'''
|style="background-color:#FFF;padding:2px 10px"| Находим минимальный элемент {{---}} '''4'''  
+
|style="background-color:#FFF;padding:2px 10px"| Находим следующий минимальный элемент {{---}} '''4'''  
 
|-
 
|-
 
|style="background-color:#FFF;padding:2px 10px"| 1 2 3 '''4''' '''5'''
 
|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"| 1 2 3 4 5
 
|style="background-color:#FFF;padding:2px 10px"| 1 2 3 4 5

Версия 10:40, 22 мая 2012

Сортировка выбором (англ. selection sort) — простой алгоритм сортировки со сложностью [math]O(n^2)[/math], где [math]n[/math] — количество элементов для сортировки.

Алгоритм

На каждом [math]i[/math]-ом шаге алгоритма находим [math]i[/math]-ый минимальный элемент и меняем его местами с [math]i[/math]-ым элементом в массиве. Таким образом, будет получен массив отсортированный по неубыванию.

Реализация

 // Входной массив 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 отсортирован

Пример

Пусть дана последовательность из [math]5[/math] элементов [math]5, 4, 1, 2, 3[/math].

Массив Описание шага
Первый проход (текущий массив начинается с первого элемента)
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