數據結構與算法 通俗易懂講解 選擇排序

很多小夥伴都老是會碰到疑問,其實還是基礎沒打紮實,這些題如果你不看答案你能知道多少呢?如果還有很多不知道就證明基礎沒打紮實,如果你還在入門糾結,如果你還在苦惱怎麼入門!小編有個建議,可以加小編弄的一個C語言交流基地,大家可以進入交流基地:862850024,裡面新手入門資料,可以說從零到項目實戰,都是可以免費獲取的,還有程序員大牛為各位免費解答問題,熱心腸的小夥伴也是蠻多的。不失為是一個交流的的好地方,小編在這裡邀請大家加入我的大家庭。歡迎你的到來。一起交流學習!共同進步!小編等你!

數據結構與算法 通俗易懂講解 選擇排序

前面我們講了通俗易懂講解 快速排序,本文將繼續介紹一種排序算法,這次介紹排序算法中的選擇排序

選擇排序介紹

選擇排序(Selection sort)是一種簡單直觀的排序算法。其基本思想是:首先在未排序的數列中找到最小(or最大)元素,然後將其存放到數列的起始位置;接著,再從剩餘未排序的元素中繼續尋找最小(or最大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

上面的說法可能還有點抽象,沒關係,下面讓我們用圖來說明一切,相信大家肯定能看懂和理解的。

圖解選擇排序

以數列{20,40,30,10,60,50}為例,演示其選擇排序過程(如下圖)。

數據結構與算法 通俗易懂講解 選擇排序

排序流程如下:

第1趟:i=0。找出a[1...5]中的最小值a[3]=10,然後將a[0]和a[3]互換。 數組變化:20,40,30,10,60,50 -- > 10,40,30,20,60,50

第2趟:i=1。找出a[2...5]中的最小值a[3]=20,然後將a[1]和a[3]互換。 數組變化:10,40,30,20,60,50 -- > 10,20,30,40,60,50

第3趟:i=2。找出a[3...5]中的最小值,由於該最小值大於a[2],該趟不做任何處理。

第4趟:i=3。找出a[4...5]中的最小值,由於該最小值大於a[3],該趟不做任何處理。

第5趟:i=4。交換a[4]和a[5]的數據。 數組變化:10,20,30,40,60,50 -- > 10,20,30,40,50,60

選擇排序代碼

根據上面流程,不難寫出選擇排序的代碼實現,此處是按升序排列。

數據結構與算法 通俗易懂講解 選擇排序

時間複雜度和穩定性

選擇排序的時間複雜度是O(N2):假設被排序的數列中有N個數。遍歷一趟的時間複雜度是O(N),需要遍歷多少次呢?N-1次因此,選擇排序的時間複雜度是O(N2)。

選擇排序是穩定的算法,它滿足穩定算法的定義:假設在數列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;並且排序之後,a[i]仍然在a[j]前面。則這個排序算法是穩定的!

為您提供通俗易懂的技術文章,讓技術變的更簡單!


分享到:


相關文章: