插入排序演算法 (一般 折半 shell)

2021-07-25 08:59:48 字數 728 閱讀 3707

1:一般插入排序

先假設第乙個元素是有序的,然後在剩下的區域裡進行排序,在第二個開始,對於每乙個往前掃瞄,看看適合它插入的位置,時間複雜度n*n,空間複雜度1

因為時間複雜度的限制,導致一般插入排序只能處理資料比較小的序列,當資料範圍比較大時,就不行了,大概1000個數可以處理

**void yibaninsertion(int a,int s)

a[high+1]=sentry;

}for(int i=0; i

對於給定的序列,選擇乙個小於n的整數dist將需要排序的元素分成若干組子串行,,所有距離為dist的元素在同乙個組內,然後對各組內的元素進行插入排序,這一趟的排序可以導致每一組的元素都是有序的

然後減少dist的值,並且不斷地進行分組和排序,重複這樣的操作,當dist=1.即所有組的元素都是有序的,也就是整個數列都是有序的

它的時間複雜度與dist有關,當增量為1時,時間複雜度為n*n,但是在某些序列的情況下最有複雜度可以達到n*(3/2);

**:void shellinsertion(int a,int s)

{ int dist=s/2;

while(1<=dist)

{for(int i=dist; i=0&&sentry

對於插入排序,是一種簡單的排序方法,它的基本思想是每次將乙個待排序的資料物件按照關鍵字的大小插入到乙個有序的序列中,得到乙個新的容量增加1的有序資料序列,如此的反覆操作,知道全部的物件都插入完畢。

折半插入排序演算法

折半插入排序演算法是直接插入排序演算法的改進 插入元素的位置通過折半查詢確定。折半插入排序演算法的時間複雜程度為o n 2 空間負責程度是o 1 具體演算法如下 資料結構如下 typedef struct elemtype recordtype 陣列array 0 的位置無效,充當輔助儲存空間 vo...

折半插入排序演算法

這個演算法中最難以理解的莫過於,對於查詢演算法的理解了。因為在這種查詢演算法中,相等的情況並沒有單獨的列舉出來跳出迴圈,演算法設計者這樣設計的目的是什麼呢?原來演算法設計者的目的是找到為了找到小於等於查詢值的最大最大值,或者大於等於查詢值得最小值,以便方便的進行插入。如在本個例子中l mid l 0...

排序演算法 折半插入排序

include include define status int define max 20 typedef struct elemtype typedef struct sqlist 結構體的定義 void inital sqlist l 初始化陣列 bool lt int i,int j 比較...