算法圖解 | 選擇排序算法
內存:可以看做一堆存儲數據的盒子,數組和鏈表是數據在內存中存儲的兩種形式。
數組:
特點:順序存儲,存儲數據在內存中是相連的,緊靠在一起的
優點:可以隨時訪問,知道第一個數據位置,以及數據在數據中的序號就可以提取出數據,讀取速度快
缺點:插入數據比較麻煩,因為不清楚該數組存儲位置後的內存是否被佔用,若被佔用則必須轉移所有數據,刪除數據需要移動被刪除元素後的所有元素
像下圖這種情況,若數組中再加入元素,則需要再重新找一塊地址,轉移所有的元素。
解決方案:預留地址,在定義數據時給數據預留一定的內存,但這樣會降低地址的利用效率,並且當數據增加到一定數量時,還是需要轉移
鏈表:
特點:鏈表中的元素可存儲在內存的任何地方,不必連續存儲,鏈表每個元素都存儲了下一個元素的地址,從而使得一系列隨機的內存地址串在一起。
優點:插入數據和刪除數據比較方便,只需要修改前一個元素指向的地址即可
缺點:數據讀取不方便,只有順序讀取的方式,需要從第一個元素開始尋找,假設需要讀取第五個元素,則必須從第一個元素開始獲取第二個元素地址,從第二個元素獲取第三個元素地址,直到得到第五個元素地址進行讀取。
數組合鏈表的操作時間複雜度:
選擇排序:
每次找出數組中的一個最小值,下一次找出數組中剩餘元素的最小值,一直到找完所有的數據,每次選擇出一個,存儲在新的數組中為選擇排序。
假設計算機存儲了很多樂曲。對於每個樂隊,都記錄了其作品被播放的次數。
我們要將這個列表按播放次數從多到少的順序排列,從而將我們喜歡的樂隊排序。該如何做呢?
一種辦法是遍歷這個列表,找出作品播放次數最多的樂隊,並將該樂隊添加到一個新列表中。
再次這樣做,找出播放次數第二多的樂隊。
最後,會得到一個有序的列表,
這樣就是一個選擇排序的過程。
選擇排序時間分析:
每一次操作需要在N個樂隊中找出最大值,一直到排好序,執行了N次複雜度為N的尋找,故時間複雜度為O(n^2).
示例代碼:
閱讀更多 AI深度學習求索 的文章