看完這個你還不會 插入排序 麼

程式設計師吳師兄發表於2018-11-24

前言

由於LeetCode上的演算法題很多涉及到一些基礎的資料結構,為了更好的理解後續更新的一些複雜題目的動畫,推出一個新系列 -----《圖解資料結構》,主要使用動畫來描述常見的資料結構和演算法。本系列包括十大排序、堆、佇列、樹、並查集、圖等等大概幾十篇。

你可以關注公眾號 五分鐘學演算法 獲取更多排序內容。

插入排序

插入排序的程式碼實現雖然沒有氣泡排序和選擇排序那麼簡單粗暴,但它的原理應該是最容易理解的了,因為只要打過撲克牌的人都應該能夠秒懂。插入排序是一種最簡單直觀的排序演算法,它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。

演算法步驟

  1. 將第一待排序序列第一個元素看做一個有序序列,把第二個元素到最後一個元素當成是未排序序列。

  2. 從頭到尾依次掃描未排序序列,將掃描到的每個元素插入有序序列的適當位置。(如果待插入的元素與有序序列中的某個元素相等,則將待插入元素插入到相等元素的後面。)。

來源:github.com/hustcc/JS-S…

演算法演示

看完這個你還不會 插入排序 麼

排序動畫過程解釋

  1. 一開始左端數字已經排序,數字 5 不動

  2. 然後,取出剩餘未操作的左端數字 3

  3. 將其與已經操作的左側數字相比較

  4. 如果左邊的數字較大,則交換兩個數字

  5. 這種情況下,由於 5 大於 3 ,所以交換兩個數字

  6. 重複此操作,直到出現一個較小的數字或者數字到達左端

  7. 數字 3 已經完成排序

  8. 接下來,和之前一樣取出剩餘未操作的左端數字 4

  9. 與其相鄰的左邊數字進行比較

  10. 這種情況下,由於 5 大於 4 ,所以交換兩個數字

  11. 繼續操作,由於 3 小於 4 ,即出現了更小的數字,所以 4 停止移動

  12. 數字 4 已經完成排序

  13. 重複相同的操作,直到所有的數字完成排序

程式碼實現

為了更好的讓讀者用自己熟悉的程式語言來理解動畫,筆者將貼出多種程式語言的參考程式碼,程式碼全部來源於網上。

C++程式碼實現

看完這個你還不會 插入排序 麼

Java程式碼實現

看完這個你還不會 插入排序 麼

Python程式碼實現

看完這個你還不會 插入排序 麼

JavaScript程式碼實現

看完這個你還不會 插入排序 麼

如果你是iOS開發者,可以在GitHub上 github.com/MisterBooo/… 獲取更直觀可除錯執行的原始碼。

你可以關注公眾號 五分鐘學演算法 獲取更多排序內容。

相關文章