因爲LeetCode上的算法題不少涉及到一些基礎的數據結構,爲了更好的理解後續更新的一些複雜題目的動畫,推出一個新系列 -----《圖解數據結構》,主要使用動畫來描述常見的數據結構和算法。本系列包括十大排序、堆、隊列、樹、並查集、圖等等大概幾十篇。git
選擇排序是一種簡單直觀的排序算法,不管什麼數據進去都是 O(n²) 的時間複雜度。因此用到它的時候,數據規模越小越好。惟一的好處可能就是不佔用額外的內存空間了吧。github
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置算法
再從剩餘未排序元素中繼續尋找最小(大)元素,而後放到已排序序列的末尾。編程
重複第二步,直到全部元素均排序完畢。數據結構
來源:github.com/hustcc/JS-S…數據結構和算法
線性搜索數列並找到最小值,此時找到了爲 2編程語言
將最小值替換爲數列中左端的數字,即將 2 與 4 進行交換動畫
此時 2 已經排序好3d
繼續線性搜索剩餘數列找到最小值,此時找到了 3調試
將最小值替換爲數列中左端的數字,即將 3 與 4 進行交換
此時 2 與 3 已經排序好
繼續線性搜索剩餘數列找到最小值,此時找到了 4
若是最小值已經在左端,那麼不執行任何操做,因此此時不作任何處理
此時 2 、 3 、 4 已經排序好
重複相同操做,直到全部數字都被排序
爲了更好的讓讀者用本身熟悉的編程語言來理解動畫,筆者將貼出多種編程語言的參考代碼,代碼所有來源於網上。
若是你是iOS開發者,能夠在GitHub上 github.com/MisterBooo/… 獲取更直觀可調試運行的源碼。
若是你想獲取高清的動畫演示,在 五分鐘學算法 公衆號裏回覆 選擇排序 便可。