插入排序演算法

2021-07-26 11:09:17 字數 1017 閱讀 5807

插入排序是一種適用於少量元素排序的有效演算法,它的工作方式類似於整理撲克牌:將無序的撲克牌放在桌子上,每次我們均從桌子上拿走一張撲克牌,將其插入到合適的位置(從右向左依次對比,找到合適的位置就插入進去)。

根據以上思想,書寫出偽**,我們將過程命名為insertion-sort:

insertion-sort(a):

for j = 2 to a.length

key = a[j]

i = j - 1

while i > 0 and a[i] > key

a[i + 1] = a[i]

i = i - 1

a[i + 1] = key

根據該偽**,我們**演算法的迴圈不變式:

初始化:在第一次迴圈迭代之前,排序子陣列(左手中的撲克牌)只有乙個元素,也就是a[1],這時子陣列是排好序的(由於只有乙個元素,所以是一種特殊狀態)。

保持:每次迴圈迭代過程中,我們均將a[j]與其左邊已排好序的元素進行比較,當找到合適的位置時,將其插入到子陣列中,所以子陣列元素個數+1,但依舊保持有序狀態。

終止:終止條件時,所有的元素都已經進行過一次迴圈比較,找到了自己合適的位置,所以此時陣列已經完成排序,演算法正確性得到證明。

演算法的效能分析:分析過程我們跳過關於指令所需常量時間的列舉過程,如有興趣可參考《演算法導論》原文,在對其時間進行求和後,可以得到其最壞執行時間的表示式:an²+bn+c,其中常量a,b,c依賴於單語句執行的常量時間。從表示式可看出,其最壞時間是關於n的二次函式,當n的數值極大時,一次項和常數項將對表示式構成極小影響,所以我們只考慮它的增長率,並將其最壞執行時間記錄為o(n²) (讀作theta n平方)。

該演算法的c++實現:

void insertion-sort(int arr,int n)

a[i + 1] = key;

}

插入排序演算法

插入排序演算法 思想 把排序過程看作是序列單個有序擴充套件為整體有序的過程,即首先取序列第二個元素與第乙個元素比較,將其插入合適位置,再將第三個元素與前兩個元素比較,將其插入合適位置,如此進行,直到最後取第n個元素與前n 1個元素進行比較並將其插入合適位置。演算法 建立日期 2004 12 14 插...

演算法 插入排序

include include 插入排序 n 2為的效率。具體思想 將陣列分為兩部分,一部分是有序的,一部分為無序的 然後從無序中選取乙個數插入在有序的數中的恰當的位置,以此迭代,直到無序的數全部遍厲完畢 void insert sort int a,int n a j tmp break retu...

插入排序演算法

下面這段話摘自 一般來說,插入排序都採用in place在陣列上實現。具體演算法描述如下 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果該元素 已排序 大於新元素,將該元素移到下一位置 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置 將...