冒泡排序算法及Ruby版的簡(jiǎn)單實(shí)現(xiàn)
算法原理:
比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。
對(duì)每一對(duì)相鄰元素作同樣的工作,從開(kāi)始第一對(duì)到結(jié)尾的最后一對(duì)。在這一點(diǎn),最后的元素應(yīng)該會(huì)是最大的數(shù)。
針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。
持續(xù)每次對(duì)越來(lái)越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。
實(shí)現(xiàn)
假設(shè)有這樣一個(gè)數(shù)組: [4, 1, 3, 2]
冒泡排序?yàn)閺牡谝粋€(gè)數(shù)開(kāi)始,吧這個(gè)數(shù)與后面的數(shù)比較,如果這個(gè)數(shù)比后面的大,就交換他們的位置。
比如,第一次比較4和1,發(fā)現(xiàn)4比1大,交換 -> [1, 4, 3, 2]
第二次比較4和3,發(fā)現(xiàn)還是4大,交換 -> [1, 3, 4, 2]
第三次比較4和2,仍然4比2大,交換 -> [1, 3, 2, 4]
這樣在進(jìn)行了第一輪循環(huán)之后,最大的數(shù)4就被頂?shù)綌?shù)組的最后去了,就像泡泡一樣從水底冒起來(lái)一樣。那么,要完成整個(gè)數(shù)組的排序,只需要把最大的數(shù)頂?shù)阶詈螅缓蟮诙喸侔训诙蟮臄?shù)頂?shù)降箶?shù)第二的位置,再來(lái)第三輪。。。。一直循環(huán)下去。
回到剛才的數(shù)組,第二輪比較開(kāi)始,現(xiàn)在的狀態(tài)是[1, 3, 2, 4]
比較1和3,1小于3,跳過(guò) -> [1, 3, 2, 4]
比較3和2,3大于2,交換 -> [1, 2, 3, 4]
這一輪到這里就可以停止了,因?yàn)榈谝惠喴呀?jīng)把最大的4頂?shù)搅俗詈?,所以第二輪只要確保第二大的數(shù)頂?shù)降箶?shù)第二就行。
然后繼續(xù)第三輪(雖然目前看起來(lái)已經(jīng)排序完成了)
比較1和2,不用交換[1, 2, 3, 4]
這里比較就全部完成。原理非常簡(jiǎn)單。
def bubble_sort(list) list.each_index do |index| (list.length - index - 1).times do |e| if list[e] > list[e + 1] list[e], list[e + 1] = list[e + 1], list[e] end end end end
相關(guān)文章
Ruby中的String對(duì)象學(xué)習(xí)筆記
這篇文章主要介紹了Ruby中的String對(duì)象學(xué)習(xí)筆記,本文講解了String對(duì)象的定義、String對(duì)象的操作、使用數(shù)組下標(biāo)的方式操作字符串等內(nèi)容,需要的朋友可以參考下2014-11-11Ruby中實(shí)現(xiàn)把字符串轉(zhuǎn)換為類(lèi)的2種方法
這篇文章主要介紹了Ruby中實(shí)現(xiàn)把字符串轉(zhuǎn)換為類(lèi)的2種方法,其中一種是rails提供的方法,需要的朋友可以參考下2014-10-10借助RubyGnome2庫(kù)進(jìn)行GTK下的Ruby GUI編程的基本方法
這篇文章主要介紹了借助RubyGnome2庫(kù)進(jìn)行GTK下的Ruby GUI編程的基本方法,介紹了基本的UI和事件響應(yīng)的相關(guān)實(shí)現(xiàn),需要的朋友可以參考下2015-12-12Ruby在cmd下中文顯示亂碼以及不支持OpenSSL的問(wèn)題解決
這篇文章主要介紹了Ruby在cmd下中文顯示亂碼以及不支持OpenSSL的問(wèn)題解決,其中OpenSSL的相關(guān)編譯操作在Linux環(huán)境下進(jìn)行,需要的朋友可以參考下2015-11-11詳解組合模式的結(jié)構(gòu)及其在Ruby設(shè)計(jì)模式編程中的運(yùn)用
這篇文章主要介紹了組合模式的結(jié)構(gòu)及其在Ruby設(shè)計(jì)模式編程中的運(yùn)用,組合模式在Ruby on Rails框架開(kāi)發(fā)項(xiàng)目中也經(jīng)常被用到,需要的朋友可以參考下2016-03-03Ruby配置rspec和RestClient來(lái)檢測(cè)服務(wù)器
這篇文章主要介紹了Ruby配置rspec和RestClient來(lái)檢測(cè)服務(wù)器的方法,包括JSON文件的相關(guān)配置,需要的朋友可以參考下2015-07-07Ruby中XML格式數(shù)據(jù)處理庫(kù)REXML的使用方法指南
這篇文章主要介紹了Ruby中XML格式數(shù)據(jù)處理庫(kù)REXML的使用方法指南,值得注意的REXML庫(kù)處理XML字符串時(shí)的編碼問(wèn)題,是需要的朋友可以參考下2016-04-04Jekyll靜態(tài)網(wǎng)站后臺(tái)引擎使用教程
今天,我就來(lái)示范如何在github上搭建Blog,你可以從中掌握github的Pages功能,以及Jekyll軟件的基本用法。更重要的是,你會(huì)體會(huì)到一種建立網(wǎng)站的全新思路。2016-04-04