十大排序 插入排序

2021-10-24 03:20:37 字數 981 閱讀 7125

插入排序的思想:插入排序的思想有點類似摸撲克牌,首先抽取第一張,當做已經排好序,然後第二張,插入到已經排好序的撲克牌中,依次類推,第三張...直到最後一張。

void insertsort(int arr,int len)

arr[j] = tmp;

tmp = arr[i];}}

}}

分析:插入排序比氣泡排序快。

在陣列基本有序的情況下比選擇排序好。

簡單排序比較:

氣泡排序基本不用,太慢;

選擇排序基本不用,不穩定;

插入排序在數量小且基本有序的情況下優先選擇。

下面介紹一下改進的插入排序:希爾排序

希爾排序的思想:根據乙個陣列的長度取乙個間隔n,每間隔n個數取乙個值,在陣列中取一組數,對這一組數用插入排序排列。直到全排列。然後再縮小這個間隔,變為n/2或者其他比n小的間隔,然後每隔新的間隔取一組數,再次對這組數排列,直到全排列,一直縮小n,直到n變為1,再對全數進行一次插入排序,就得到了最終的結果。

分析:缺點:希爾排序不穩定。

優點:間隔n比較大的時候,移動的次數少。並且經過大間隔數的排序後,小的數靠前了,大的數靠後了。

間隔小的時候,移動的距離比較短。兩者結合,總的移動的次數會比單純的插入排序的次數少。

第一種取間隔的方式:n->n/2->n/4....1

void shellsort(int arr,int len)}}

}}

第二種取間隔的方式:

knuth序列

h=1h=3*h+1

1,4,13,....

根據knuth序列和陣列的長度,確定乙個最大的間隔h,然後依次遞減到1.

void shellsort(int arr,int len)

for(int gap = h;gap > 0;gap = (gap-1)/3)}}

}}

十大排序演算法 插入排序

原理 就好比我們打撲克排的抓牌階段,我們一般拿到一張新的排會與前面的牌進行比較,然後放到合適的位置,即每次抓到牌後預設前面的牌已經全部排好序。將第一待排序序列第乙個元素看做乙個有序序列,把第二個元素到最後乙個元素當成是未排序序列。從頭到尾依次掃瞄未排序序列,將掃瞄到的每個元素插入有序序列的適當位置。...

十大排序演算法(二)插入排序

前言 插入排序也叫 插牌法 排序 演算法 1tmp記錄第n個元素,並將第n個元素設為空位 n 1 2依次用前n個元素 和tmp比較 如果tmp比他們小,將他插入此位置,此時空位前移,再重複迴圈之至比到第乙個位置 核心 k標記位置 tmp儲存元素 a j 1 a j 元素前移 時間複雜度 最好o n ...

十大排序 直接插入排序

直接插入排序 空間複雜度o 1 時間複雜度最好情況是o n 最壞情況是o n 平均情況是o n 是穩定的內排序演算法 從後往前比較,把後面的元素作為哨兵 includeusing namespace std includevoid insertionsort vector q else q j 1 ...