排序方式彙總(一) 插入排序

2022-01-18 01:50:16 字數 1738 閱讀 2914

插入排序演算法主要有直接插入排序演算法、折半查詢演算法、希爾插入排序演算法。

·直接插入排序:

將記錄插到已排好的有序表中,從而得到乙個新的、記錄數量增1的有序表。

【演算法思想】

1)設待排序的記錄存放在陣列r[1..n],r[1]是乙個有序序列。

2)迴圈n-1次,每次使用順序查詢法,查詢r[i](i=2,3...,n)在已排好的序列r[1..i-1]中的插入位置,然後將r[i]插入表廠為i-1的有序序列r[1..i-1]直到將r[n]插入表廠為n-1的有序序列r[1..n-1],最後得到乙個表長尾n的有序序列。

如下圖所示待排序記錄的關鍵字序列為使用直接插入排序法進行排序的過程:

【演算法描述】

void insertsort (sqlist &l)

}

【演算法特點】1)是穩定的2)因為要進行折半查詢,所以只能用於順序結構,不能用於鏈式結構3)適合初始記錄無序,n較大時的情況。

·希爾排序

希爾排序又稱「縮小增量排序」是插入排序的一種。

【演算法思想】

希爾排序實質上是採用分組插入的方法。先將整個待排序記錄序列分割成幾組,從而減少參與直接超人排序的資料量,對每組分別進行直接插入排序,然後增加每組的資料量,重新分組。

如下例項:

【演算法描述】

void shellinsert(sqlist &l,int dk){//對順序表l做一趟增量是dk的希爾插入排序

for(i=dk+1;i0&&l.r[0].key

【演算法特點】1)記錄跳躍式第移動導致排序演算法是不穩定的2)只能用於順序結構,不能用於鏈式結構3)增量序列可以有多種取法,但應該使增量序列中的值沒有除1之外的公因式,並且最後乙個增量值必須等於1

4)記錄總的比較次數和移動次數都比直接插入排序要少,n越大時,效果越明顯。

【小結】

總之,插入排序的基本思想是,每一趟將乙個待排序的記錄,按其關鍵字的大小插入到已經排好序的一組記錄的適當位置上,直到所有待排序記錄全部插入為止。

排序(一)插入排序

繼插入排序 這裡說一下折半插入排序。從前面的迴圈中可以看出直接插入排序是邊比較邊移動的。這裡講的折半插入排序則是將比較和移動分開。不斷的折半查詢定位再一次性的移動元素,最終插入元素 void insertsort int a,int n else 中間元素小於要插入的元素,則在後半部分 for j ...

排序演算法(一) 插入排序

首先,對排序演算法 輸入 n 個數 輸出 序列的乙個排序,使得a1 a2 an 待排序的數為key 插入排序演算法,是乙個對少量元素進行排序的有效演算法.其偽 如圖 插入排序演算法在形式上類似於我們平時打牌時,邊抽牌邊整理撲克牌的順序,我們將新的牌與手中已經整理好順序的撲克牌進行比較,最終將抽到的牌...

排序演算法(一) 插入排序

一 插入排序 直接插入 二分插入 希爾排序 基本思想 從前面已經排序好的資料中查詢合適的位置,將待排序資料插入到該位置 從後面向前找合適的位置 1 直接插入排序 基本思想 從右向左查詢 從左邊已排序好的資料中查詢合適的位置,插入待排序的資料。private static void derictins...