內部排序(1) 插入類排序

2021-08-04 11:52:29 字數 1349 閱讀 3748

#插入類排序 ##一、直接插入排序

演算法分析: 從空間角度來看,只需要乙個輔助空間r[0]。 從時間角度來看,主要時間耗費在關鍵字比較和移動元素上。 直接插入排序的時間複雜度為o(n^2),空間複雜度為o(1)。 直接插入排序是穩定的。 **直接插入排序在基本有序時效率較高,並且在序列規模不是很大時效率也很高。**

void insertsort(int a,int len)    //直接插入排序 

a[j+1] = a[0];}}

演算法分析: 採用折半插入排序法,可減少關鍵字的比較次數。每插入乙個元素,需要比較的次數最大為折半判定樹的深度。**雖然折半插入排序法與直接插入排序法相比較,改善了演算法中比較次數的數量級為o(nlog2n),但其並未改變移動元素的時間耗費,所以折半插入排序總的時間複雜度仍然是o(n^2)。**

void bininsertsort(int a,int len) //二分插入排序 

else

//把等於劃到這一類可以在有多個相同值時減少相同值移動的次數;

}int tmp = 0;

for(int j = i - 1; j >= low; j--)

cout

<0];}}

上述**中的邏輯設計的實際區別如下:

(1)把等於劃到下面

(2)把等於劃到上面

可見,把等於號放在下面的分支,相當於遇到相等元素時、不在進行比較能夠提高效率。

演算法分析:shell排序是對直接插入排序的一種改進(從後續的**中可以看出),延續了直接插入排序的優點,核心思想是: >待排序列有n個元素,先取乙個小於n的整數h1作為第乙個增量,把待排序列以間隔h1分成若干子串行,子串行內使用插入排序; >然後取第二個增量h2(

void shellsort(int a, int len , int d, int dlen)//shell排序非遞迴實現 

a[k+d[i]] = a[0];}}

}}

總結:插入排序

時間複雜度

穩定性直接插入排序

o(n^2)

穩定二分插入排序

比較o(nlog2n)、移動o(n^2)

穩定shell排序

o(n^1.5)

不穩定

內部排序 插入式排序

將要排序的元素通過插入的方式找到其適當的位置來進行排序。直接上code吧 int g counter1 0 int g counter2 0 void insert sort int list,int len g counter1 printf n i d current state n i for...

內部排序 插入排序 希爾排序

希爾排序將要排序的數值按照某個間隔分成數個數列集合,再對各個數列集合進行插入式排序,重複進行數列分割,每次分割的長度縮小為上一次分割長度的一半,直到分割間隔為0,此時排序完成。直接上code吧 include stdafx.h include include include void shell s...

內部排序演算法 插入排序

插入排序演算法 insert sorting 基本思想 把n個待排序的元素看成乙個有序表和乙個無序表,開始時有序表只包含乙個元素,無需表包含n 1個元素,排序的過程 中每次從無序表中取出來第乙個元素把它的排序碼一次與有序表元素進行比較,將它插入到有序表中適當的位置,使之成為新的有序表。實現方法一 f...