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

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 2: Строка 2:
  
 
== Алгоритм ==
 
== Алгоритм ==
[[file:Selection_sort.png|thumb|240px|Пример работы алгоритма для последовательности из 6 элементов]]
 
 
 
1. Находим номер минимального элемента из текущего массива.
 
1. Находим номер минимального элемента из текущего массива.
  
Строка 9: Строка 7:
  
 
3. Если текущий массив пуст, то данный массив отсортирован. Иначе вернемся к шагу 1, убрав первый элемент из  текущего массива.
 
3. Если текущий массив пуст, то данный массив отсортирован. Иначе вернемся к шагу 1, убрав первый элемент из  текущего массива.
 
 
'''Пример'''
 
 
Пусть дана последовательность из <tex>6</tex> элементов <tex>5, 4, 1, 6, 2, 3</tex>.
 
 
Белым фоном обозначен текущий список, зеленым отсортированная часть, а красным минимальный элемент.
 
  
 
== Реализация ==
 
== Реализация ==
Строка 26: Строка 17:
 
     swap(x[i], x[min]);
 
     swap(x[i], x[min]);
 
   // Массив x отсортирован
 
   // Массив x отсортирован
 +
 +
== Пример ==
 +
 +
Пусть дана последовательность из <tex>6</tex> элементов <tex>5, 4, 1, 6, 2, 3</tex>.
 +
 +
{| style="background-color:#CCC;margin:0.5px"
 +
!style="background-color:#EEE"| До
 +
!style="background-color:#EEE"| После
 +
!style="background-color:#EEE"| Описание шага
 +
|-
 +
|colspan=3|''Первый проход (проталкиваем второй элемент — '''''2''''')''
 +
|-
 +
|style="background-color:#FFF;padding:2px 10px"| '''5 2''' 4 3 1
 +
|style="background-color:#FFF;padding:2px 10px"| '''2 5''' 4 3 1
 +
|style="background-color:#FFF;padding:2px 10px"| Алгоритм сравнивает второй элемент с первым и меняет их местами.
 +
|-
 +
|colspan=3|''Второй проход (проталкиваем третий элемент — '''''4''''')''
 +
|-
 +
|style="background-color:#FFF;padding:2px 10px"| 2 '''5 4''' 3 1
 +
|style="background-color:#FFF;padding:2px 10px"| 2 '''4 5''' 3 1
 +
|style="background-color:#FFF;padding:2px 10px"| Сравнивает третий со вторым и меняет местами
 +
|-
 +
|style="background-color:#FFF;padding:2px 10px"| '''2 4''' 5 3 1
 +
|style="background-color:#FFF;padding:2px 10px"| '''2 4''' 5 3 1
 +
|style="background-color:#FFF;padding:2px 10px"| Второй и первый отсортированы, swap не требуется
 +
|-
 +
|colspan=3|''Третий проход (проталкиваем четвертый — '''''3''''')''
 +
|-
 +
|style="background-color:#FFF;padding:2px 10px"| 2 4 '''5 3''' 1
 +
|style="background-color:#FFF;padding:2px 10px"| 2 4 '''3 5''' 1
 +
|style="background-color:#FFF;padding:2px 10px"| Меняет четвертый и третий местами
 +
|-
 +
|style="background-color:#FFF;padding:2px 10px"| 2 '''4 3''' 5 1
 +
|style="background-color:#FFF;padding:2px 10px"| 2 '''3 4''' 5 1
 +
|style="background-color:#FFF;padding:2px 10px"| Меняет третий и второй местами
 +
|-
 +
|style="background-color:#FFF;padding:2px 10px"| '''2 3''' 4 5 1
 +
|style="background-color:#FFF;padding:2px 10px"| '''2 3''' 4 5 1
 +
|style="background-color:#FFF;padding:2px 10px"| Второй и первый отсортированы, swap не требуется
 +
 +
|-
 +
|colspan=3|''Четвертый проход (проталкиваем пятый элемент — '''''1''''')''
 +
|-
 +
|style="background-color:#FFF;padding:2px 10px"| 2 3 4 '''5 1'''
 +
|style="background-color:#FFF;padding:2px 10px"| 2 3 4 '''1 5'''
 +
|style="background-color:#FFF;padding:2px 10px"| Меняет пятый и четвертый местами
 +
|-
 +
|style="background-color:#FFF;padding:2px 10px"| 2 3 '''4 1''' 5
 +
|style="background-color:#FFF;padding:2px 10px"| 2 3 '''1 4''' 5
 +
|style="background-color:#FFF;padding:2px 10px"| Меняет четвертый и третий местами
 +
|-
 +
|style="background-color:#FFF;padding:2px 10px"| 2 '''3 1''' 4 5
 +
|style="background-color:#FFF;padding:2px 10px"| 2 '''1 3''' 4 5
 +
|style="background-color:#FFF;padding:2px 10px"| Меняет третий и второй местами
 +
|-
 +
|style="background-color:#FFF;padding:2px 10px"| '''2 1''' 3 4 5
 +
|style="background-color:#FFF;padding:2px 10px"| '''1 2''' 3 4 5
 +
|style="background-color:#FFF;padding:2px 10px"| Меняет второй и первый местами. Массив отсортирован.
 +
|}
 +
  
 
== Ссылки ==  
 
== Ссылки ==  

Версия 22:48, 20 мая 2012

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

Алгоритм

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 отсортирован

Пример

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

До После Описание шага
Первый проход (проталкиваем второй элемент — 2)
5 2 4 3 1 2 5 4 3 1 Алгоритм сравнивает второй элемент с первым и меняет их местами.
Второй проход (проталкиваем третий элемент — 4)
2 5 4 3 1 2 4 5 3 1 Сравнивает третий со вторым и меняет местами
2 4 5 3 1 2 4 5 3 1 Второй и первый отсортированы, swap не требуется
Третий проход (проталкиваем четвертый — 3)
2 4 5 3 1 2 4 3 5 1 Меняет четвертый и третий местами
2 4 3 5 1 2 3 4 5 1 Меняет третий и второй местами
2 3 4 5 1 2 3 4 5 1 Второй и первый отсортированы, swap не требуется
Четвертый проход (проталкиваем пятый элемент — 1)
2 3 4 5 1 2 3 4 1 5 Меняет пятый и четвертый местами
2 3 4 1 5 2 3 1 4 5 Меняет четвертый и третий местами
2 3 1 4 5 2 1 3 4 5 Меняет третий и второй местами
2 1 3 4 5 1 2 3 4 5 Меняет второй и первый местами. Массив отсортирован.


Ссылки

Литература

  • Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгоритмы: построение и анализ, 2-е издание. М.: Издательский дом "Вильямс", 2005. ISBN 5-8459-0857-4