排序演算法之 直接插入排序及時間複雜度分析

2021-10-05 21:51:38 字數 707 閱讀 6237

直接插入排序

直接插入排序的核心思想就是:將陣列中的所有元素依次跟前面已經排好的元素相比較,如果選擇的元素比已排序的元素小,則交換,直到全部元素都比較過。

因此,從上面的描述中我們可以發現,直接插入排序可以用兩個迴圈完成:

第一層迴圈:遍歷待比較的所有陣列元素第二層迴圈:將本輪選擇的元素與前面已經排好序的元素相比較,若當前元素小,則進行交換

演算法實現

int i,j,insertval;

for(i=

1;i) arr[j+1]

=insertval;

}

時間複雜度分析

從空間上看,它只需要乙個記錄的輔助空間,因此關鍵看時間複雜度。

當最好情況,也就是排序表本身就是有序的,則只需要進行n-1次比較,由於每次都是arr[i] > arr[i+1],沒移動記錄,時間複雜度為o(n).

最壞的情況下,是排序表逆序,需要比較 (n+2)(n-1)/2次,移動(n+4)(n-1)/2次。如果排序記錄是隨機的,根據概率相同的原則,平均比較和移動的次數約為n^2/4次。

因此,直接插入排序演算法時間複雜度為o(n^2),比氣泡排序和簡單選擇排序演算法效能好一些。

排序演算法 插入排序之直接插入排序

直接插入排序的核心思想是把乙個記錄插入乙個有序序列中,每插入乙個記錄就得到乙個新的有序序列,直到所有記錄都插入成功,得到有序序列。每次插入記錄時的有序序列如何得到,關鍵在第一次,第一次要插入的記錄時序列的第二個值,有序序列只有乙個值,就是第乙個記錄。a j 1 x j 1就是要插入的位置 print...

排序演算法之直接插入排序

直接插入排序 straight insertion sort 的基本思想 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中的適當位置,直到全部記錄插入完成為止。設陣列為a 0 n 1 其中紅色區域為有序區域 1.初始時,a 0 自成1個有序區,無序區為a 1.n 1 a 0 a ...

排序演算法之直接插入排序

直接插入排序類似於我們平常在打撲克摸牌時候的一種情形。我習慣於左手拿牌右手摸牌,每次先把左手中的牌齊整齊,然後右手新摸一張牌中把它放到左手中正確的位置,讓它成為乙個新的整齊的牌堆。如果根據上面的思路我們可以發現,直接插入排序的思想就是,從需要排序的第二個數字開始,拿取乙個數,與前面的數字進行比較,放...