【圖解數據結構】 一組動畫演示選擇排序

前言

因爲LeetCode上的算法題不少涉及到一些基礎的數據結構,爲了更好的理解後續更新的一些複雜題目的動畫,推出一個新系列 -----《圖解數據結構》,主要使用動畫來描述常見的數據結構和算法。本系列包括十大排序、堆、隊列、樹、並查集、圖等等大概幾十篇。git

選擇排序

選擇排序是一種簡單直觀的排序算法,不管什麼數據進去都是 O(n²) 的時間複雜度。因此用到它的時候,數據規模越小越好。惟一的好處可能就是不佔用額外的內存空間了吧。github

算法步驟

  1. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置算法

  2. 再從剩餘未排序元素中繼續尋找最小(大)元素,而後放到已排序序列的末尾。編程

  3. 重複第二步,直到全部元素均排序完畢。數據結構

來源:github.com/hustcc/JS-S…數據結構和算法

算法演示

排序動畫過程解釋

  1. 線性搜索數列並找到最小值,此時找到了爲 2編程語言

  2. 將最小值替換爲數列中左端的數字,即將 2 與 4 進行交換動畫

  3. 此時 2 已經排序好3d

  4. 繼續線性搜索剩餘數列找到最小值,此時找到了 3調試

  5. 將最小值替換爲數列中左端的數字,即將 3 與 4 進行交換

  6. 此時 2 與 3 已經排序好

  7. 繼續線性搜索剩餘數列找到最小值,此時找到了 4

  8. 若是最小值已經在左端,那麼不執行任何操做,因此此時不作任何處理

  9. 此時 2 、 3 、 4 已經排序好

  10. 重複相同操做,直到全部數字都被排序

代碼實現

爲了更好的讓讀者用本身熟悉的編程語言來理解動畫,筆者將貼出多種編程語言的參考代碼,代碼所有來源於網上。

C++代碼實現

Java代碼實現

JavaScript代碼實現

Python代碼實現

若是你是iOS開發者,能夠在GitHub上 github.com/MisterBooo/… 獲取更直觀可調試運行的源碼。

若是你想獲取高清的動畫演示,在 五分鐘學算法 公衆號裏回覆 選擇排序 便可。

相關文章
相關標籤/搜索