因爲LeetCode上的算法題不少涉及到一些基礎的數據結構,爲了更好的理解後續更新的一些複雜題目的動畫,推出一個新系列 -----《圖解數據結構》,主要使用動畫來描述常見的數據結構和算法。本系列包括十大排序、堆、隊列、樹、並查集、圖等等大概幾十篇。git
你能夠關注公衆號 五分鐘學算法 獲取更多排序內容。github
插入排序的代碼實現雖然沒有冒泡排序和選擇排序那麼簡單粗暴,但它的原理應該是最容易理解的了,由於只要打過撲克牌的人都應該可以秒懂。插入排序是一種最簡單直觀的排序算法,它的工做原理是經過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。算法
將第一待排序序列第一個元素看作一個有序序列,把第二個元素到最後一個元素當成是未排序序列。編程
從頭至尾依次掃描未排序序列,將掃描到的每一個元素插入有序序列的適當位置。(若是待插入的元素與有序序列中的某個元素相等,則將待插入元素插入到相等元素的後面。)。數據結構
來源:github.com/hustcc/JS-S…數據結構和算法
一開始左端數字已經排序,數字 5 不動編程語言
而後,取出剩餘未操做的左端數字 3動畫
將其與已經操做的左側數字相比較3d
若是左邊的數字較大,則交換兩個數字調試
這種狀況下,因爲 5 大於 3 ,因此交換兩個數字
重複此操做,直到出現一個較小的數字或者數字到達左端
數字 3 已經完成排序
接下來,和以前同樣取出剩餘未操做的左端數字 4
與其相鄰的左邊數字進行比較
這種狀況下,因爲 5 大於 4 ,因此交換兩個數字
繼續操做,因爲 3 小於 4 ,即出現了更小的數字,因此 4 中止移動
數字 4 已經完成排序
重複相同的操做,直到全部的數字完成排序
爲了更好的讓讀者用本身熟悉的編程語言來理解動畫,筆者將貼出多種編程語言的參考代碼,代碼所有來源於網上。
若是你是iOS開發者,能夠在GitHub上 github.com/MisterBooo/… 獲取更直觀可調試運行的源碼。
你能夠關注公衆號 五分鐘學算法 獲取更多排序內容。