在開始主要內(nèi)容之前,先說一下為什么會去寫這篇文章呢舍悯?當然是有原因的航棱。
第一個原因:我和我的同學在學習java的排序過程中,冒泡排序和選擇排序傻傻分不清楚贱呐。把這兩個排序放在一起丧诺,可以幫助我們?nèi)ジ玫睦斫馑鼈儭?/p>
第二個原因:主要檢驗下自己自學的成果與問題。
那么好奄薇,咱們言歸正傳驳阎,首先說下這個冒泡排序:
冒泡排序:冒泡排序的定義就不提了,總結(jié)起來就一句話(劃重點):馁蒂,從左到右呵晚,數(shù)組中相鄰的兩個元素進行比較,將較大的放到后面沫屡。
我們從下面這個例子中去學習下冒泡排序饵隙;
例如:有一個int [] a={2,6,5,3,1};

這個就是用冒泡排序的思路進行的第一輪排序:從圖中,不難看出第一輪比較沮脖。比較了4次金矛;
第二輪排序開始時的數(shù)組已經(jīng)變成了{2芯急,5,3驶俊,1娶耍,6}

因為第一輪已經(jīng)確定6的位置,所以饼酿,第二輪比較是不再需要再去與這個6比較的榕酒,從圖可以看出,第二輪比較故俐,比較了3次想鹰,確定了5的位置;
第三輪排序開始時的數(shù)組已經(jīng)變成了{2药版,3辑舷,1,5刚陡,6}惩妇;

同理,第三輪是不需要去與5進行比較的筐乳,從圖可以看出,第三輪比較了2次乔妈,確定了3的位置蝙云。
第四輪排序開始時的數(shù)組已經(jīng)變成了{2,1路召,3勃刨,5,6}股淡;

第4輪比較完之后呢身隐,這組數(shù)就已經(jīng)完全排好了順序,接下來就需要找規(guī)律唯灵,去實現(xiàn)下代碼了: 運行結(jié)果:
到這里呢贾铝,冒泡排序就結(jié)束了;下面是選擇排序,總結(jié)一句話就是(劃重點):從第一個位置開始比較埠帕,找出最小的垢揩,和第一個位置互換,開始下一輪敛瓷。
我們同樣叁巨,以上面的例子為例 int [] a= {2,6,5,3,1};

從圖可以看出,第一輪比較呐籽,比較了4輪锋勺,找出了最小數(shù)1蚀瘸,與第一個位置的數(shù)字進行了換位;
第二輪排序開始時的數(shù)組已經(jīng)變成了{1庶橱,6苍姜,5,3悬包,2}衙猪;

從圖可以看出,第二輪比較布近,比較了3次垫释,確定剩余數(shù)中的最小數(shù)為2,與第二個位置的數(shù)交換撑瞧。
第三輪排序開始時的數(shù)組已經(jīng)變成了{1棵譬,2,5预伺,3订咸,6};

從圖可以看出酬诀,第三輪比較脏嚷,比較了2次,確定了剩余數(shù)中最小的數(shù)3瞒御,與第三個位置的數(shù)互換位置父叙。
第四輪排序開始時的數(shù)組已經(jīng)變成了{1,2肴裙,3趾唱,5,6}蜻懦;

從圖可以看出甜癞,第四輪比較,比較了1次宛乃,確定了剩余數(shù)中最小的數(shù)5悠咱,放在了第4個位置。
這樣4輪比較后烤惊,這組數(shù)已經(jīng)排序好了乔煞,接下來同上,去找規(guī)律柒室,實現(xiàn)代碼了:
運行結(jié)果:
選擇排序也就結(jié)束了渡贾,這樣一弄有沒有更清楚呢?
那么好雄右,是時候來總結(jié)下他們的區(qū)別了(劃重點)空骚。
(1)冒泡排序是比較相鄰位置的兩個數(shù)纺讲,而選擇排序是按順序比較,找最大值或者最小值囤屹;
(2)冒泡排序每一輪比較后熬甚,位置不對都需要換位置,選擇排序每一輪比較都只需要換一次位置肋坚;
(3)冒泡排序是通過數(shù)去找位置乡括,選擇排序是給定位置去找數(shù);
冒泡排序優(yōu)缺點:優(yōu)點:比較簡單智厌,空間復雜度較低诲泌,是穩(wěn)定的;
缺點:時間復雜度太高铣鹏,效率慢敷扫;
選擇排序優(yōu)缺點:優(yōu)點:一輪比較只需要換一次位置;
缺點:效率慢诚卸,不穩(wěn)定(舉個例子5葵第,8,5合溺,2卒密,9 我們知道第一遍選擇第一個元素5會和2交換,那么原序列中2個5的相對位置前后順序就破壞了)辫愉。