排序算法:冒泡排序和選擇排序的內容,區別與優缺點。

冒泡排序和選擇排序


在開始主要內容之前,先說一下爲什麼會去寫這篇文章呢?當然是有原因的。

  • 第一個原因:我和我的同學在學習java的排序過程中,冒泡排序和選擇排序傻傻分不清楚。把這兩個排序放在一起,可以幫助我們去更好的理解它們。

  • 第二個原因:主要檢驗下自己自學的成果與問題。

那麼好,咱們言歸正傳,首先說下這個冒泡排序:

冒泡排序:

  冒泡排序的定義就不提了,總結起來就一句話(劃重點):從左到右,數組中相鄰的兩個元素進行比較,將較大的放到後面。

我們從下面這個例子中去學習下冒泡排序;

例如:有一個int [] a={2,6,5,3,1};
在這裏插入圖片描述
  這個就是用冒泡排序的思路進行的第一輪排序:從圖中,不難看出第一輪比較。比較了4次;

第二輪排序開始時的數組已經變成了{2,5,3,1,6}
在這裏插入圖片描述
  因爲第一輪已經確定6的位置,所以,第二輪比較是不再需要再去與這個6比較的,從圖可以看出,第二輪比較,比較了3次,確定了5的位置;

第三輪排序開始時的數組已經變成了{2,3,1,5,6};
在這裏插入圖片描述
  同理,第三輪是不需要去與5進行比較的,從圖可以看出,第三輪比較了2次,確定了3的位置。

第四輪排序開始時的數組已經變成了{2,1,3,5,6};
在這裏插入圖片描述
第4輪比較完之後呢,這組數就已經完全排好了順序,接下來就需要找規律,去實現下代碼了:
在這裏插入圖片描述
運行結果:
在這裏插入圖片描述
到這裏呢,冒泡排序就結束了;

選擇排序:

  下面是選擇排序,總結一句話就是(劃重點):從第一個位置開始比較,找出最小的,和第一個位置互換,開始下一輪。

我們同樣,以上面的例子爲例 int [] a= {2,6,5,3,1};
在這裏插入圖片描述
  從圖可以看出,第一輪比較,比較了4輪,找出了最小數1,與第一個位置的數字進行了換位;

第二輪排序開始時的數組已經變成了{1,6,5,3,2};
在這裏插入圖片描述
  從圖可以看出,第二輪比較,比較了3次,確定剩餘數中的最小數爲2,與第二個位置的數交換。

第三輪排序開始時的數組已經變成了{1,2,5,3,6};
在這裏插入圖片描述
  從圖可以看出,第三輪比較,比較了2次,確定了剩餘數中最小的數3,與第三個位置的數互換位置。

第四輪排序開始時的數組已經變成了{1,2,3,5,6};
在這裏插入圖片描述
  從圖可以看出,第四輪比較,比較了1次,確定了剩餘數中最小的數5,放在了第4個位置。

這樣4輪比較後,這組數已經排序好了,接下來同上,去找規律,實現代碼了:
在這裏插入圖片描述
運行結果:
在這裏插入圖片描述
選擇排序也就結束了,這樣一弄有沒有更清楚呢?

那麼好,是時候來總結下他們的區別了(劃重點)。

(1)冒泡排序是比較相鄰位置的兩個數,而選擇排序是按順序比較,找最大值或者最小值;

(2)冒泡排序每一輪比較後,位置不對都需要換位置,選擇排序每一輪比較都只需要換一次位置;

(3)冒泡排序是通過數去找位置,選擇排序是給定位置去找數;

冒泡排序優缺點:

  優點:比較簡單,空間複雜度較低,是穩定的;

  缺點:時間複雜度太高,效率慢;

選擇排序優缺點:

  優點:一輪比較只需要換一次位置;

  缺點:效率慢,不穩定(舉個例子5,8,5,2,9 我們知道第一遍選擇第一個元素5會和2交換,那麼原序列中2個5的相對位置前後順序就破壞了)。

到這裏,這篇博客就結束了,那麼好,又有操作了:

如內容有問題,懇請大佬們指出,小生定虛心接受。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章