前言
由於LeetCode上的演算法題很多涉及到一些基礎的資料結構,為了更好的理解後續更新的一些複雜題目的動畫,推出一個新系列 —–《圖解資料結構》,主要使用動畫來描述常見的資料結構和演算法。本系列包括十大排序、堆、佇列、樹、並查集、圖等等大概幾十篇。
選擇排序
選擇排序是一種簡單直觀的排序演算法,無論什麼資料進去都是 O(n²) 的時間複雜度。所以用到它的時候,資料規模越小越好。唯一的好處可能就是不佔用額外的記憶體空間了吧。
演算法步驟
-
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
-
再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。
-
重複第二步,直到所有元素均排序完畢。
演算法演示
排序動畫過程解釋
-
線性搜尋數列並找到最小值,此時找到了為 2
-
將最小值替換為數列中左端的數字,即將 2 與 4 進行交換
-
此時 2 已經排序好
-
繼續線性搜尋剩餘數列找到最小值,此時找到了 3
-
將最小值替換為數列中左端的數字,即將 3 與 4 進行交換
-
此時 2 與 3 已經排序好
-
繼續線性搜尋剩餘數列找到最小值,此時找到了 4
-
如果最小值已經在左端,那麼不執行任何操作,所以此時不做任何處理
-
此時 2 、 3 、 4 已經排序好
-
重複相同操作,直到所有數字都被排序
程式碼實現
為了更好的讓讀者用自己熟悉的程式語言來理解動畫,筆者將貼出多種程式語言的參考程式碼,程式碼全部來源於網上。
C++程式碼實現
Java程式碼實現
JavaScript程式碼實現
Python程式碼實現
如果你是iOS開發者,可以在GitHub上 github.com/MisterBooo/… 獲取更直觀可除錯執行的原始碼。
如果你想獲取高清的動畫演示,在 五分鐘學演算法 公眾號裡回覆 選擇排序 即可。