算法圖解|選擇排序算法

算法圖解 | 選擇排序算法

內存:可以看做一堆存儲數據的盒子,數組和鏈表是數據在內存中存儲的兩種形式。

數組

特點:順序存儲,存儲數據在內存中是相連的,緊靠在一起的

優點:可以隨時訪問,知道第一個數據位置,以及數據在數據中的序號就可以提取出數據,讀取速度快

缺點:插入數據比較麻煩,因為不清楚該數組存儲位置後的內存是否被佔用,若被佔用則必須轉移所有數據,刪除數據需要移動被刪除元素後的所有元素

像下圖這種情況,若數組中再加入元素,則需要再重新找一塊地址,轉移所有的元素。

算法圖解|選擇排序算法

算法圖解|選擇排序算法

解決方案:預留地址,在定義數據時給數據預留一定的內存,但這樣會降低地址的利用效率,並且當數據增加到一定數量時,還是需要轉移

鏈表:

特點:鏈表中的元素可存儲在內存的任何地方,不必連續存儲,鏈表每個元素都存儲了下一個元素的地址,從而使得一系列隨機的內存地址串在一起。

算法圖解|選擇排序算法

優點:插入數據和刪除數據比較方便,只需要修改前一個元素指向的地址即可

缺點:數據讀取不方便,只有順序讀取的方式,需要從第一個元素開始尋找,假設需要讀取第五個元素,則必須從第一個元素開始獲取第二個元素地址,從第二個元素獲取第三個元素地址,直到得到第五個元素地址進行讀取。

數組合鏈表的操作時間複雜度:

算法圖解|選擇排序算法

選擇排序

每次找出數組中的一個最小值,下一次找出數組中剩餘元素的最小值,一直到找完所有的數據,每次選擇出一個,存儲在新的數組中為選擇排序。

假設計算機存儲了很多樂曲。對於每個樂隊,都記錄了其作品被播放的次數。

算法圖解|選擇排序算法

我們要將這個列表按播放次數從多到少的順序排列,從而將我們喜歡的樂隊排序。該如何做呢?

一種辦法是遍歷這個列表,找出作品播放次數最多的樂隊,並將該樂隊添加到一個新列表中。

算法圖解|選擇排序算法

再次這樣做,找出播放次數第二多的樂隊。

算法圖解|選擇排序算法

最後,會得到一個有序的列表,

算法圖解|選擇排序算法

這樣就是一個選擇排序的過程。

選擇排序時間分析:

每一次操作需要在N個樂隊中找出最大值,一直到排好序,執行了N次複雜度為N的尋找,故時間複雜度為O(n^2).

示例代碼:

算法圖解|選擇排序算法


分享到:


相關文章: