插入排序 直接插入排序

2022-04-06 00:49:43 字數 849 閱讀 6621

最優複雜度:當輸入陣列就是排好序的時候,複雜度為o(n),而快速排序在這種情況下會產生o(n^2)的複雜度。

最差複雜度:當輸入陣列為倒序時,複雜度為o(n^2)          其實插入排序的複雜度和逆序對的個數一樣,當陣列倒序時,逆序對的個數為n(n-1)/2,因此插入排序複雜度為o(n^2)。

插入排序比較適合用於「少量元素的陣列」。

如果碰見乙個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。所以,相等元素的前後順序沒有改變,從原無序序列出去的順序就是排好序後的順序,所以插入排序是穩定的。

**實現如下:

對於插入排序,如果比較操作的代價比交換操作大的話,可以採用二分查詢法來減少比較操作的數目,我們稱為二分插入排序,**如下:

void insertsort_binary(rectype r,int

n)

for(j=i-1;j>0;j--)

r[j]=r[j+1]; //

將新元素插入位置後面的元素像後移動一位

r[left]=temp; //

插入新元素

}}

當n較大時,二分插入排序的比較次數比直接插入排序的最差情況好得多,但比直接插入排序的最好情況要差,所當以元素初始序列已經接近公升序時,直接插入排序比二分插入排序比較次數少。二分插入排序元素移動次數與直接插入排序相同,依賴於元素初始序列。

插入排序 直接插入排序

直接插入排序演算法思想 將整個資料表分成左右兩個子表,其中左子表為有序表,右子表為無序表 整個排序過程就是將右子表中的元素逐個插入到左子表中,直到右子表為空,而左子表成為新的有序表。演算法過程分析 將待排序的元素存放在陣列r n 1 中,在初始狀態下,r 0 為監視哨,r 1 為有序區,r 2 r ...

插入排序 直接插入排序

一.插入排序的基本思想 將乙個記錄插入已排序好的有序表中,從而得到乙個新的記錄數加1的有序表。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。所謂的哨兵,就是即將插入的記錄。二.示例 如果碰見相等的元素,會被插到後面,所以,相等元素的前後順序沒有改變,插入排序是穩定的。三.演算法實現 public ...

插入排序 直接插入排序

直接插入排序的基本思想 將乙個記錄插入到已排序好的有序表中,然後得到乙個新記錄數增1的有序表。也就是 先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。如果碰見乙個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。所以,相等元素的前後順序沒...