1. 程式人生 > >拆入演算法排序

拆入演算法排序

排序(2):直接插入排序

 

排序(2):直接插入排序

一、前言

直接插入排序(Insertion Sort)序是一種最簡單的插入排序。為簡化問題,我們下面只討論升序排序。

二、演算法思想

插入排序:每一趟將一個待排序的記錄,按照其關鍵字的大小插入到有序佇列的合適位置裡,知道全部插入完成。 

動態效果示意圖:

排序(2):直接插入排序

以上的過程,其實就是典型的直接插入排序,每次將一個新資料插入到有序佇列中的合適位置裡。

很簡單吧,接下來,我們要將這個演算法轉化為程式語言。

假設有一組無序序列 R0, R1, ... , RN-1。

(1) 我們先將這個序列中下標為 0 的元素視為元素個數為 1 的有序序列。

(2) 然後,我們要依次把 R1, R2, ... , RN-1 插入到這個有序序列中。所以,我們需要一個外部迴圈,從下標 1 掃描到 N-1 。

(3) 接下來描述插入過程。假設這是要將 Ri 插入到前面有序的序列中。由前面所述,我們可知,插入Ri時,前 i-1 個數肯定已經是有序了。

所以我們需要將Ri 和R0 ~ Ri-1 進行比較,確定要插入的合適位置。這就需要一個內部迴圈,我們一般是從後往前比較,即從下標 i-1 開始向 0 進行掃描。