21 FreeBASIC - сортировка пузырьком

F
freebs
![](https://serey.io/imageupload_data/5d620a581e69d6789af2a3536e845bf6a7f40135) Рассмотрим самый простой метод сортировки - метод сортировки пузырьком. Его ещё называют сортировка простыми обменами или сортировка пузырьком. При просмотре(проходе) массива его элементы попарно сравниваются и если пара не упорядочена - элементы меняются местами. Так происходит до тех пор пока такая перестановка нужна. Но как же узнать нужна она или нет? Всё просто если при очередном проходе никакие элементы не обменялись значениями(не переставились) значит и последующий проход не нужен - элементы упорядочены. При каждом проходе можно заметить (сортировка по возрастанию, например) что наибольший элемент смещается в конец массива, а наименьший перемещается в направлении к началу на один шаг. Отсюда и название метода - легкие элементы всплывают, как пузырьки. Массив на видео: 3,0,1,8,7,2,5,4,6,9 Сначала проверяется первая пара a[0]=3 и a[1]=0, здесь a[0]>a[1](3>0) следовательно они меняются местами. ![](https://i.imgur.com/NJsqodu.png) Теперь проверяется следующая пара a[1]=3 и a[2]=1, здесь a[1]>a[2](3>1) следовательно и они меняются местами, здесь a[1] уже равно 3, a[1] и a[0] обменялись значениями на предыдущем шаге. ![](https://i.imgur.com/CcnLwIL.png) При сравнении a[2] и a[3], здесь условие a[2]>a[3](3>8) не выполняется, следовательно значения элементов местами **не** меняются. ![](https://i.imgur.com/ypNT7YH.png) a[3]=8 и a[4]=7(8>7) - меняются местами ![](https://i.imgur.com/HXeeSOY.png) a[4]=8 и a[5]=2(8>2) - меняются местами ![](https://i.imgur.com/DQbHhOp.png) a[5]=8 и a[6]=5(8>5) - меняются местами ![](https://i.imgur.com/CQa9M1h.png) a[6]=8 и a[7]=4(8>4) - меняются местами ![](https://i.imgur.com/j8O7PLH.png) a[7]=8 и a[8]=6(8>6) - меняются местами ![](https://i.imgur.com/HoHoobJ.png) и лишь в последнем случае a[8]=8 и a[9]=9(8 не больше 9) - не меняются местами ![](https://i.imgur.com/I3fH1o3.png) видно как 8-элемент массива a[3] переместился на позицию a[8] Первый проход цикла завершён, а так как элементы переставлялись - просмотрим массив ещё раз. Пары a[0] и a[1], ![](https://i.imgur.com/LxYEET0.png) a[1] и a[2], ![](https://i.imgur.com/293EJhT.png) a[2] и a[3] упорядочены ![](https://i.imgur.com/UBVAY8C.png) и лишь добравшись до a[3] и a[4], переставляем элементы местами. И наблюдаем как с каждым шагом "7" перемещается к "8" ![](https://i.imgur.com/sdNLY2B.png) И так далее - после второго прохода пошёл третий... ![](https://i.imgur.com/7XAzbNU.png) ...пока все элементы не оказались на своих местах. ![](https://i.imgur.com/RrH1tKU.png) ``` dim shared as integer a(0 to 9)=>{3,0,1,8,7,2,5,4,6,9} dim as integer i, j, flag sub printb dim k as integer for k =0 to 9 print a(k); next k print end sub printb print do flag=0 for i=0 to 8 if a(i+1)

Comments