插入演算法是每次將乙個新資料插入到有序佇列中的合適位置的一種演算法。
演算法的詳細過程描述如下:
假設有乙個無序佇列r1, r2, r3, …, rn
(1)首先認為r1是有序的,然後將r2, r3,…,rn依次插入到這個有序佇列的合適位置,因此我們需要乙個外部迴圈
(2)我們需要將ri插入到合適位置,ri前面的資料已經是有序的了,我們需要將ri依次和前面的資料進行比較,每次比較將插入前面佇列中比ri大的資料後移一位,直到找到第乙個比ri小的資料rj,插入到rj的後面,這裡需要乙個內部迴圈
void insert_sort(int* array, int
left, int
right)
else
}
}
}
當資料正序時,執行效率最好,每次插入都不用移動前面的元素,時間複雜度為o(n)。
當資料反序時,執行效率最差,每次插入都要前面的元素後移,時間複雜度為o(n2)。
所以,資料越接近正序,直接插入排序的演算法效能越好。
由直接插入排序演算法可知,我們在排序過程中,需要乙個臨時變數儲存要插入的值,所以空間複雜度為 1 。
直接插入排序的過程中,不需要改變相等數值元素的位置,所以它是穩定的演算法。
演算法 直接插入
排序挨個來,今天到插入排序。下面來談談插入排序裡的直接插入排序 解決麻煩的事情,可以先從簡單的 問題入手 咱們先開始兩個數的插入排序。具體過程 先把要排序的數放到臨時變數裡,然後與第乙個數比較,如果可以插入到第乙個數的位置,然後第乙個數向後移,即把第乙個數放到第二個位置。最後再把第二個數放到第乙個位...
排序演算法 直接插入
直接插入排序基本思想 假設待排序的記錄存放在陣列r 1.n 中。初始時,r 1 自成1個有序區,無序區為r 2.n 從i 2起直至i n為止,依次將r i 插入當前的有序區r 1.i 1 中,生成含n個記錄的有序區。通過下面乙個排序的例子,來幫助我們理解直接插入排序的思想。我們假設下面無序的序列開頭...
排序演算法 直接插入
簡介 插入排序 insertion sort 是一種簡單直觀且穩定的排序演算法。基本思想是 每一趟將乙個待排序的記錄,按其關鍵字的大小插入到已經排好序的一組記錄的適當位置上,直到所有待排序記錄全部插入為止。圖示 類似玩撲克牌遊戲時,按序排列紙牌。示例 include using namespace ...