資料結構 插入排序

2021-08-07 13:30:30 字數 1650 閱讀 3065

其實好多人總是分不清插入排序和氣泡排序,更有甚者一直就是一口咬定看到插入喊冒泡,看到冒泡還喊冒泡.這我就

很尷尬了 今

天呢我們先來瞧瞧這個插入排序,相信氣泡排序大家都懂所以這裡就不說了,直接開始主題.

插入排序:每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中的適當位置,直到全部記錄

插入完成為止

其實插入排序在我這裡看來還是不夠直觀,我覺得就應該叫他挖坑—插入排序.

為什麼我要起這樣的名字

,這是因為是先挖坑再元素

插入到坑里,那麼具體的過程我們來看一看.

也就是當你迴圈走到a[i]這個位置時,前面的a[0]....a[i-1]都已經依次排好序了,因為該過程是從a[0]開始,每遇

到乙個元素就

執行一次該過程,所以當迴圈走完最後乙個元素,那麼該插入排序完成. 有木有覺得突然就想明白了.

**實現

void insertsort(int arg, int n)

arg[j + 1] = tmp;

}}

void insertsort2(int a, int n)  

}

我們現在很清楚的明白了插入排序的過程,他不同於氣泡排序或者說更優於氣泡排序,接下來看他們之間的區別:

演算法名稱  最差時間複雜度  平均時間複雜度  最優時間複雜度  空間複雜度  穩定性

氣泡排序    o(n^2)     o(n^2)       o(n)         o(1)      穩定

插入排序    o(n^2)     o(n^2)       o(n)         o(1)      穩定

從上面看就是一模一樣的對吧... 我們通俗一點講,比如最近個個大學都在新生軍訓有一名新生叫小卷,他早上遲到了

,當它來到

自己的部隊的時候自己的同學都已經站好隊,在**站軍姿,這時候小卷做完教官罰他的俯臥撐歸隊,(假設

隊伍按大小個排隊)

這是小卷使用

氣泡排序

來尋找自己的位置,從該排的排頭開始跟第一名同學比較如果我比你高那麼我

們就交換小卷就一直用這種方

式尋找自己的位置,但是這一排有100個

同學,而小卷是最高的.這時候教官生氣了就喊小卷

你再過來做50個俯臥撐直接滾去最後一

列,很明顯教官使用的就是

插入排序

.  希望大家以後分辨清楚插入排序和冒泡排

序,只有明白各自的原理呢,就能分清兩個概念.

當然氣泡排序也會有優化的演算法,比如當你這個區間有序我就不用進去交換迴圈,直接跳到下乙個迴圈.這個時候冒泡的時

間複雜度最壞的位o(n^2)最好的時間複雜度為o(n), 那麼如果有人問你冒泡和插入排序什麼區別,如果讓你使用你會用哪一

個.並且告訴我為什麼??? 這個時候,不用擔心我選擇的依舊是插入排序. 因為氣泡排序的優化需要的是嚴格的有序.它才能

跳過這次迴圈查詢. 而插入排序是如果你近似有序我依然可以讓它少迴圈很多次,所以效率從這裡會有一點微弱的不同.

資料結構 插入排序

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

資料結構 插入排序

一 直接插入排序 1 直接插入排序的演算法思想 r i 的鍵值ki與r 0 r i 1 的鍵值依次比較 從後往前比 找到r i 應插入的位置,並把從該位置開始的記錄後移乙個位置,把r i 插入到找到的插入位置,完成一趟直接排序 重複選r i 1 r n 完成上述操作,直到排序完畢 注 為什麼要從後往...

資料結構 插入排序

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