資料結構 插入排序

2021-07-25 09:50:13 字數 1075 閱讀 3307

一、直接插入排序

1、直接插入排序的演算法思想:

r[i] 的鍵值ki與r[0]…r[i-1]的鍵值依次比較(從後往前比),找到r[i]應插入的位置,並把從該位置開始的記錄後移乙個位置,把r[i] 插入到找到的插入位置,完成一趟直接排序;重複選r[i+1]….. r[n]完成上述操作,直到排序完畢 。

注:為什麼要從後往前比?可以在比較的同時將需要向後移動的元素向後面挪位。

2、演算法:

void zjcrpx(jd r,int n)

}
4、二分法插入排序演算法分析:

從空間來看:只需要乙個記錄的輔助空間;

從時間來看:在上面的演算法中,每插入乙個ri,平均比較次數為log2i,減少了關鍵字間的比較次數,但記錄的移動次數不變。因此二分插入排序的時間複雜度仍是o(n2)。

穩定性: 穩定性排序 。

三、sell(希爾)排序

1、希爾排序思想方法:

(1)先取乙個正整數d12、shell排序中增量di的取法:

如何選擇di才能產生最好的排序效果,這涉及到許多數學問題(至今未得到完全解決), shell本人提出,取:d1=n/2,d2=d1/2,…..,di=1,平均比較次數和平均移動次數為n1.3左右,且排序是不穩定的。

3、演算法:

void shellpx(jd r,int n)

{jd x;

int i,j,k;

k=n/2;

while(k>=1){

for (i=k+1;i<=n;i++)

{x=r[i];

j=i-k;

while ((j>0)&&(x.key

由兩種迴圈構成,外迴圈是增量由n/2逐步縮小到1的迴圈,for所構成的迴圈是針對某一特定的增量k,進行大跨步踴躍式的插入排序(按增量分組進行組內插入排序)。例如,當k=2時,關鍵字被分為兩組。當k=1時,此演算法等同於直接插入排序,由於前面大增量的處理,使關鍵字大體有序,因此最後一趟排序移動的記錄少,處理速度快。

資料結構 插入排序

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

資料結構 插入排序

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

資料結構 插入排序

基本概念 排序 使記錄按關鍵字遞增或遞減排列 關鍵字重複不影響記錄順序的排序稱為穩定排序 影響記錄順序的稱為不穩定排序。僅在記憶體中進行的排序稱為內部排序 涉及內外存交換的排序稱為外部排序。內部排序 插入排序 選擇排序 交換排序 歸併排序 分配排序。排序演算法的步驟 1 比較兩個關鍵字大小 2 改變...