排序算法:冒泡排序和選擇排序的內(nèi)容,區(qū)別與優(yōu)缺點(diǎn)。

在開(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};

                       ![image](https://upload-images.jianshu.io/upload_images/3413336-77396f1fa3a8a6a5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

這個(gè)就是用冒泡排序的思路進(jìn)行的第一輪排序:從圖中,不難看出第一輪比較。比較了4次;

第二輪排序開(kāi)始時(shí)的數(shù)組已經(jīng)變成了{(lán)2,5,3,1,6}

                        ![image](https://upload-images.jianshu.io/upload_images/3413336-4e2316f47a8afb4f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

因?yàn)榈谝惠喴呀?jīng)確定6的位置,所以,第二輪比較是不再需要再去與這個(gè)6比較的,從圖可以看出,第二輪比較,比較了3次,確定了5的位置;

第三輪排序開(kāi)始時(shí)的數(shù)組已經(jīng)變成了{(lán)2,3,1,5,6};

                         ![image](https://upload-images.jianshu.io/upload_images/3413336-b6a38dbfdaeaa30a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

同理,第三輪是不需要去與5進(jìn)行比較的,從圖可以看出,第三輪比較了2次,確定了3的位置。

第四輪排序開(kāi)始時(shí)的數(shù)組已經(jīng)變成了{(lán)2,1,3,5,6};

                   ![image](https://upload-images.jianshu.io/upload_images/3413336-7606c41c10411408.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

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

image

到這里呢,冒泡排序就結(jié)束了;下面是選擇排序,總結(jié)一句話就是(劃重點(diǎn)):從第一個(gè)位置開(kāi)始比較,找出最小的,和第一個(gè)位置互換,開(kāi)始下一輪。

我們同樣,以上面的例子為例 int [] a= {2,6,5,3,1};

                       ![image](https://upload-images.jianshu.io/upload_images/3413336-1dc7a701a641616f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

從圖可以看出,第一輪比較,比較了4輪,找出了最小數(shù)1,與第一個(gè)位置的數(shù)字進(jìn)行了換位;

第二輪排序開(kāi)始時(shí)的數(shù)組已經(jīng)變成了{(lán)1,6,5,3,2};

                   ![image](https://upload-images.jianshu.io/upload_images/3413336-297ba9f0be8c287a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

從圖可以看出,第二輪比較,比較了3次,確定剩余數(shù)中的最小數(shù)為2,與第二個(gè)位置的數(shù)交換。

第三輪排序開(kāi)始時(shí)的數(shù)組已經(jīng)變成了{(lán)1,2,5,3,6};

                 ![image](https://upload-images.jianshu.io/upload_images/3413336-6b405289506a12c3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

從圖可以看出,第三輪比較,比較了2次,確定了剩余數(shù)中最小的數(shù)3,與第三個(gè)位置的數(shù)互換位置。

第四輪排序開(kāi)始時(shí)的數(shù)組已經(jīng)變成了{(lán)1,2,3,5,6};

                   ![image](https://upload-images.jianshu.io/upload_images/3413336-2421dba42104a747.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

從圖可以看出,第四輪比較,比較了1次,確定了剩余數(shù)中最小的數(shù)5,放在了第4個(gè)位置。

這樣4輪比較后,這組數(shù)已經(jīng)排序好了,接下來(lái)同上,去找規(guī)律,實(shí)現(xiàn)代碼了:

image

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

image

選擇排序也就結(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ì)位置前后順序就破壞了)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容