在開(kāi)始主要內(nèi)容之前,先說(shuō)一下為什么會(huì)去寫這篇文章呢?當(dāng)然是有原因的。
第一個(gè)原因:我和我的同學(xué)在學(xué)習(xí)java的排序過(guò)程中,冒泡排序和選擇排序傻傻分不清楚。把這兩個(gè)排序放在一起,可以幫助我們?nèi)ジ玫睦斫馑鼈儭?/p>
第二個(gè)原因:主要檢驗(yàn)下自己自學(xué)的成果與問(wèn)題。
那么好,咱們言歸正傳,首先說(shuō)下這個(gè)冒泡排序:
冒泡排序:冒泡排序的定義就不提了,總結(jié)起來(lái)就一句話(劃重點(diǎn)):,從左到右,數(shù)組中相鄰的兩個(gè)元素進(jìn)行比較,將較大的放到后面。
我們從下面這個(gè)例子中去學(xué)習(xí)下冒泡排序;
例如:有一個(gè)int [] a={2,6,5,3,1};

這個(gè)就是用冒泡排序的思路進(jìn)行的第一輪排序:從圖中,不難看出第一輪比較。比較了4次;
第二輪排序開(kāi)始時(shí)的數(shù)組已經(jīng)變成了{(lán)2,5,3,1,6}

因?yàn)榈谝惠喴呀?jīng)確定6的位置,所以,第二輪比較是不再需要再去與這個(gè)6比較的,從圖可以看出,第二輪比較,比較了3次,確定了5的位置;
第三輪排序開(kāi)始時(shí)的數(shù)組已經(jīng)變成了{(lán)2,3,1,5,6};

同理,第三輪是不需要去與5進(jìn)行比較的,從圖可以看出,第三輪比較了2次,確定了3的位置。
第四輪排序開(kāi)始時(shí)的數(shù)組已經(jīng)變成了{(lán)2,1,3,5,6};

第4輪比較完之后呢,這組數(shù)就已經(jīng)完全排好了順序,接下來(lái)就需要找規(guī)律,去實(shí)現(xiàn)下代碼了: 
運(yùn)行結(jié)果:

到這里呢,冒泡排序就結(jié)束了;下面是選擇排序,總結(jié)一句話就是(劃重點(diǎn)):從第一個(gè)位置開(kāi)始比較,找出最小的,和第一個(gè)位置互換,開(kāi)始下一輪。
我們同樣,以上面的例子為例 int [] a= {2,6,5,3,1};

從圖可以看出,第一輪比較,比較了4輪,找出了最小數(shù)1,與第一個(gè)位置的數(shù)字進(jìn)行了換位;
第二輪排序開(kāi)始時(shí)的數(shù)組已經(jīng)變成了{(lán)1,6,5,3,2};

從圖可以看出,第二輪比較,比較了3次,確定剩余數(shù)中的最小數(shù)為2,與第二個(gè)位置的數(shù)交換。
第三輪排序開(kāi)始時(shí)的數(shù)組已經(jīng)變成了{(lán)1,2,5,3,6};

從圖可以看出,第三輪比較,比較了2次,確定了剩余數(shù)中最小的數(shù)3,與第三個(gè)位置的數(shù)互換位置。
第四輪排序開(kāi)始時(shí)的數(shù)組已經(jīng)變成了{(lán)1,2,3,5,6};

從圖可以看出,第四輪比較,比較了1次,確定了剩余數(shù)中最小的數(shù)5,放在了第4個(gè)位置。
這樣4輪比較后,這組數(shù)已經(jīng)排序好了,接下來(lái)同上,去找規(guī)律,實(shí)現(xiàn)代碼了:

運(yùn)行結(jié)果:

選擇排序也就結(jié)束了,這樣一弄有沒(méi)有更清楚呢?
那么好,是時(shí)候來(lái)總結(jié)下他們的區(qū)別了(劃重點(diǎn))。
(1)冒泡排序是比較相鄰位置的兩個(gè)數(shù),而選擇排序是按順序比較,找最大值或者最小值;
(2)冒泡排序每一輪比較后,位置不對(duì)都需要換位置,選擇排序每一輪比較都只需要換一次位置;
(3)冒泡排序是通過(guò)數(shù)去找位置,選擇排序是給定位置去找數(shù);
冒泡排序優(yōu)缺點(diǎn):優(yōu)點(diǎn):比較簡(jiǎn)單,空間復(fù)雜度較低,是穩(wěn)定的;
缺點(diǎn):時(shí)間復(fù)雜度太高,效率慢;
選擇排序優(yōu)缺點(diǎn):優(yōu)點(diǎn):一輪比較只需要換一次位置;
缺點(diǎn):效率慢,不穩(wěn)定(舉個(gè)例子5,8,5,2,9 我們知道第一遍選擇第一個(gè)元素5會(huì)和2交換,那么原序列中2個(gè)5的相對(duì)位置前后順序就破壞了)。