資料結構(插入排序)

2021-09-30 14:23:32 字數 1092 閱讀 9957

設陣列為a[0…n-1]。

1 初始時,a[0]自成1個有序區,無序區為a[1..n-1]。令i=1。

2 將a[i]併入當前的有序區a[0…i-1]中形成a[0…i]的有序區間。

3 i++並重複第二步直到i==n-1。排序完成。

void insertsort(int *a, int b)

}}

演算法特點

1 是穩定排序。

2 演算法簡便,且容易實現。

3 時間複雜度為o(n²)。

折半插入排序的基本思想與直接插入排序一樣,在插入第i(i≥1)個元素時,前面i−1個元素已經排好序。區別在於尋找插入位置的方法不同,折半插入排序是採用折半查詢法來尋找插入位置的。

//折半插入排序

void binsertsort(int *a, int n)

else

}for (int j = i - 1; j >= high + 1; --j)

a[high + 1] = a[i];}}

}

演算法特點

1 是穩定排序。

2 因為是折半查詢,所以只能用於順序結構,不能用於鏈式結構。

3 時間複雜度為o(n²)。

4 適合初始記錄無序,n較大的情況。

該方法的基本思想是:先將整個待排元素序列分割成若干個子串行(由相隔某個「增量」的元素組成的)分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次直接插入排序。因為直接插入排序在元素基本有序的情況下(接近最好情況),效率是很高的,因此希爾排序在時間效率上比前兩種方法有較大提高。

//希爾排序

void shellsort(int a, int n)}}

}

演算法特點

1 記錄跳躍式地移動導致排序方法是不穩定的。

2 只能用於順序結構,不能用於鏈式結構

3 增量序列可以有各種取法,最後乙個增量必須等於1。

4 記錄總的比較次數和移動次數都比直接插入排序要少,n越大時,效果越明顯。所以適合初始記錄無序,n較大時的情況。

資料結構 插入排序

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

資料結構 插入排序

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

資料結構 插入排序

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