插入排序以及簡單演算法的下界

2022-06-20 14:27:10 字數 947 閱讀 8237

插入排序:

插入排序是最簡單的演算法之一,實現方法是序列中從第二個數開始之後的的每個數都和它前面的所有數作比較併排好序,所以插入排序為o(n2),是乙個精確的界。

圖畫演示插入排序的基本思想:

c語言實現**:

(演算法**接受乙個含有元素的陣列和乙個包含元素個數的整數)

void insertionsort(elementtype a,intn)

}

簡單演算法下界的思考:數字陣列的乙個逆序是指數組中具有ia[j]的序偶(a[i],a[j]),逆序正好是需要由插入排序(非直接)執行的交換次數。

定理1:n 個互異數的陣列的平均逆序數為n(n-1)/4

證明:對於含有n個數的表l例如(含四個數的表(8,3,2,5) ),有逆序數為6( (8,3)(8,2)(8,5)(3,2) )。其反序表lr

(5,2,3,8),逆序數為2( (5,2)(5,3) )。表l中任意兩個數的序偶(x,y)且y>x,即逆序,恰是表l和表lr所有逆序( (8,3)(8,2)(8,5)(3,2)(5,2)(5,3) )之中的乙個。而表l和表lr序偶的總個數為表l元素總數n(4)關於2的組合數,即n(n-1)/2,所以乙個互異數表與其反序表的逆序數之和是n(n-1)/2,可得任意乙個互異數表的平均逆序數為 n(n-1)/4。

定理2:通過交換相鄰元素進行排序的任何演算法平均需要ω(n2)

證明:初始的平均逆序數是n(n-1)/4 = ω(n2),而每次交換只減少乙個逆序,因此需要ω(n2)次交換。

由這個下界可以明白,乙個排序演算法通過刪除逆序得以向前進行,為了更有效的執行,每次交換刪除應多於乙個逆序。

(文章參考《資料結構與演算法分析c語言描述》機械工業出版社)

演算法探索 插入排序演算法 簡單插入排序 希爾排序

常用的排序演算法分為 交換排序 氣泡排序 快速排序 插入排序 簡單插入排序 希爾排序 選擇排序 簡單選擇排序 堆排序 歸併排序 基數排序 桶排序 插入排序 顧名思義,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入 依據深海的理解舉乙個簡單的例子 未排序序列是 5,9,8,4,2 已排...

插入排序演算法的簡單分析

聽到乙個很形象的比喻,插入排序就像是在整理撲克牌,每從桌上拿起一張,就要把它插入到手上之前已經按順序拍好的撲克牌中,這樣,直到拿起最後一張,將它放在合適的位置之後,手上的撲克牌就整體有序了。插入排序的程式如下 include using namespace std void swap int arr...

簡單插入排序

思想 抽出乙個元素,在其前面的元素中找到適當的位置進行插入 這種方式 是將 待插入元素 逐個跟i 1個已排序元素比較,並交換位置 public static void sort int a 設資料序列有n個元素,最好情況 乙個排好序的序列,如。每趟元素與i 1個元素比較的次數是1次。因為前i 1個元...