排序算法之冒泡排序
- 2019 年 10 月 7 日
- 筆記
導
LEAD
語
感謝關注matlab愛好者公眾號!如果公眾號文章對您有幫助,別忘了點擊分享和「在看」哦!若您對公眾號有什麼意見或建議,請在公眾號中回復或在任意文章底部留言!
排序算法在編程領域中起着舉足輕重的作用,在目標檢索、機器學習、數值計算、圖像處理等領域有着廣泛地應用。為了追本溯源,公眾號特推出常用經典排序算法系列推文,讓小夥伴們深入了解排序算法的實現原理,同時也提升matlab編程能力。
今天給大家的介紹的排序算法為:冒泡排序算法,它與簡單選擇排序算法有些類似,不過它不是選擇位置標記,而是直接將序列中兩相鄰元素進行交換,較大的元素下沉,較小的元素上浮,下面就一起來看看該算的實現原理吧。
冒泡排序算法實現過程(以升序排列為例):
對於長度為N的無序數組A,假設以A(1)為作為起始元素,將A(1)與A(2)作比較,如果A(1)>A(2),則兩者交換,否則保持不變;然後將A(2)與A(3)比較,如果A(2)>A(3),則兩者交換,否則保持不變;以此類推,直至A(n-1)與A(n)比較,如果A(n-1)>A(n),則兩者交換,否則保持不變,這樣即完成一次冒泡操作,最大的元素將沉至序列尾部;按照以上方法逐個完成冒泡操作,即可完成無序數組的排序。
matlab代碼
主程序:main.m
format short; clc;clear; A = round(rand(1,10),2); nA = BubbleSort(A); disp(['原始序列:',num2str(A)]); disp(['冒泡排序:',num2str(nA)]);
冒泡排序函數:BubbleSort.m
function A = BubbleSort(A) % 感謝關註:matlab愛好者 % 冒泡選擇排序算法源代碼 % 作者:matlab愛好者 len = length(A); % 外層循環控制冒泡操作移位 for w = 1:len % 內層循環進行相鄰元素依次比較 flag = 0; % 為了提高冒泡法效率,增加位置交換標識, % 位置交換標識值發生改變,說明序列還是無序狀態, % 如果不發生改變,則說明已經完成排序,無需再進行後面的操作 for v = 1:len-w if(A(v)>A(v+1)) % 完成位置交換 tmp = A(v); A(v) = A(v+1); A(v+1) = tmp; flag = 1; end end if flag == 0 break; end end
封面圖片:由DaKub在Pixabay上發佈
參考資料:https://www.runoob.com/w3cnote/sort-algorithm-summary.html
看完還想看 (點擊下方文字直接訪問)