資料結構(插入排序)

2021-09-29 16:25:29 字數 946 閱讀 4373

無序區插入到有序區。

主要插入排序方法:

(1)直接插入排序

(2)折半插入排序

(3)希爾排序

直接插入排序

初始時,有序區只有乙個元素r[0],要經過n-1趟排序。

void

insertsort

(rectype r,

int n)

while

(j>=

0&&r[j]

.key>tmp.key)

r[j+1]

=tmp;}}

}

最好情況:比較次數:n-1 移動次數:0

最壞情況:比較次數:n(n-1)/2 移動次數:(n-1)(n+4)/2

總的平均比較和移動次數約為o(n^2)

折半插入排序

查詢採用折半查詢方法。

void

bininsertsdort

(rectype r,

int n)

}}

折半查詢的平均關鍵字比較次數為log2(i+1)-1,平均移動元素的次數為i/2+2,所以平均時間複雜度為:o(n^2)。

提高查詢效率,但是移動次數不變。

希爾排序

基本思路:1、d=n/2

2、將排序序列分為d個組,在各組內進行直接插入排序

3、遞減d=d/2,重複2,直到d=1

void

shellsort

(rectype r,

int n)

r[j+d]

=tmp;

}r[j+d]

=tmp;

}d=d/2;

}}

時間複雜度為o(n^1.3)

希爾排序是一種不穩定的排序演算法,因為相同元素排序過程中相對位置會發生變化。

資料結構 插入排序

演算法中經常會用到各種各樣的演算法,比較簡答的思想就是氣泡排序,一般剛開始程式設計時遇到排序問題時,會很容易想到冒泡排,氣泡排序是通過兩輛比較數值,從而將數字移動到開始或者末尾的位置,反覆重複這個過程從而就達到了排序的目的。其時間複雜度大概是 n2 還有一種比較常用的插入排序,其思想與氣泡排序比較類...

資料結構 插入排序

一 直接插入排序 1 直接插入排序的演算法思想 r i 的鍵值ki與r 0 r i 1 的鍵值依次比較 從後往前比 找到r i 應插入的位置,並把從該位置開始的記錄後移乙個位置,把r i 插入到找到的插入位置,完成一趟直接排序 重複選r i 1 r n 完成上述操作,直到排序完畢 注 為什麼要從後往...

資料結構 插入排序

插入排序的基本思想是 每步將乙個待排序的物件,按其關鍵字大小,插入到前面已經排好序的一組物件的適當位置上,直到物件全部插入為止。簡言之,邊插入邊排序,保證子串行中隨時都是排好序的。新元素插入到 在已形成的有序表中線性查詢,並在適當位置插入,把原來位置上的元素向後順移。關鍵字序列t 13,6,3,31...