1 BubbleSort(Array): 2 n = length(Array) 3 repeat 4 swapped = False 5 for i = 1 to> n-1 do 6 if Array[i-1] > Array[i] then 7 swap(Array[i-1], Array[i]) 8 swapped = True 9 n = n - 1 10 until not swapped
Зато красивая визуализация.
from bubblesort import BubbleArray, bubble_sort, bubble_sort_improved
demo_array = BubbleArray([4, 5, 8, 3, 1, 2, 6, 7, 9])
bubble_sort(demo_array)
# from bubblesort import *
demo_array = BubbleArray([4, 5, 8, 3, 1, 2, 6, 7, 9])
bubble_sort(demo_array, show_wasted=False)
# from bubblesort import *
demo_array = BubbleArray([4, 5, 8, 3, 1, 2, 6, 7, 9])
bubble_sort(demo_array, show_wasted=True)
# from bubblesort import *
demo_array = BubbleArray(range(9, 0, -1))
bubble_sort(demo_array, show_wasted=True)
# from bubblesort import *
demo_array = BubbleArray([4, 5, 8, 3, 1, 2, 6, 7, 9])
bubble_sort_improved(demo_array, show_wasted=True)
# from bubblesort import *
demo_array = BubbleArray(range(9, 0, -1))
bubble_sort_improved(demo_array, show_wasted=True)
# from bubblesort import *
demo_array = BubbleArray([1, 2, 3, 5, 4, 6, 7, 8, 9])
bubble_sort_improved(demo_array, show_wasted=True)
# from bubblesort import *
demo_array = BubbleArray([1, 2, 3, 5, 4, 6, 7, 8, 9])
bubble_sort(demo_array, show_wasted=True)
Сортировка выбором - простой принцип: находится наименьший элемент, меняется местами с первым неотсортированным.
1 SelectionSort(Array): 2 for i in 0..n-1 3 min = i 4 for j in i+1..n-1 5 if Array[j] < Array[min] 6 min = j 7 if i != min 8 swap(Array, i, min)</font>
Вопрос подробно рассматривается в книге "Конкретная математика" Р. Грэхема и Д. Кнута.
Если в алгоритме присутствует цикл (то есть почти всегда)
Если в алгоритме присутствует цикл (то есть почти всегда):
Важно дать формальное определение, потому что оно будет имспользоваться при проверке сохранения инварианта
Такая перестановка (элементов массива), что для всех , где - индекс элемента в списке, </font>
from selection_sort import selection_sort, SelectionArray
array = SelectionArray([9, 3, 4, 6, 5, 7, 8, 2, 0, 1])
selection_sort(array)
array = SelectionArray(list(range(10)))
selection_sort(array)
1 InsertionSort(Array): 2 for i in 0..n-1 3 x = Array[i] 4 j = i - 1 5 while j >= 0 and Array[j] > x 6 Array[j+1] = Array[j] // "сдвиг" вправо 7 j = j - 1 8 Array[j+1] = x // Вставка x в отсортированную часть 9 i = i + 1
Также Insertion Sort:


from insertion_sort import insertion_sort, InsertionArray
array = InsertionArray([9, 3, 4, 6, 5, 7, 8, 2, 0, 1])
insertion_sort(array)
array
from insertion_sort import insertion_sort, InsertionArray
array = InsertionArray([0, 1, 2, 8, 3, 4, 5, 6, 7, 9])
insertion_sort(array)
array
from insertion_sort import insertion_sort, InsertionArray
array = InsertionArray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
insertion_sort(array)
array
Сортировка Шелла (1959г.) - "улучшение" сортировки вставками / сортировки пузырьком

- Почему Shell sort работает быстро?<br>
- И насколько быстро?<br>
- Какие свойства у этой сортировки?
</font>