一文看懂經典排序演算法之插入排序

2021-10-23 03:16:33 字數 1096 閱讀 5130

終於開始寫演算法了…由於自己最生疏的就是插入排序所以先寫插入= =

我們先來看下插入排序是怎麼實現的

(以公升序排序為例)

給出一組數如下:

1 3 5 4 2 將3與1比較 1<3所以不執行交換

接下去比較5與3 仍然不交換 接下去比較5和1

發現依舊不用交換 退出此時的迴圈 接下去對4進行比較 4<5 4>3 那麼將3 5之間空出乙個位置 將4插入3和5之間

得到1 3 4 5 2

接下去將4和3 1比較 發現不交換 退出此時的迴圈

接下去比較2和5 得到1 3 4 2 5

再將2與4進行比較 得到1 3 2 4 5

再往前比較得到1 2 3 4 5 最終完成後退出迴圈

可以想象一下洗牌的過程 不停的往前比較插入

我個人覺得難點就在於空出位置那一步= =(經常把自己搞暈了orz

來看以下**

for i=

2to n

t=a(i)

'記錄一下當前的a(i)值防止後面丟失

j=i-1do

while t<=a(j)

'當當前數比前面數小時執行

a(j+1)

=a(j)

'將j位置的數賦值給後乙個數 實現空出位置

j=j-

1'進行往前比較

if j=

0then

exit

doloop

a(j+1)

=t '將空出的位置用要插入的數補上

next i

我們可以看出

這裡的插入是會在某個位置形成兩個一樣的數 最後用要插入的數覆蓋掉實現往後挪位的

如 1 3 5 4 2 到 1 3 5 5 2 到 1 3 4 5 2

當然如果是一串有序數插入某個數就非常簡單啦 原理是一樣的 都是通過標記位置實現 這裡就不加贅述了

由於是屬於給萌新看的小白教程(以及自己回顧)所以盡可能多的加了注釋…希望有幫助

不過聽說我們下一屆換了一種語言學… 不過我依舊只會vb

某只會vb6.0的不知名高中生

經典排序演算法之 插入排序

插入排序的基本思想是將乙個記錄插入到已經排好序的有序表中,從而形成乙個新的有序表。對於少量元素的排序,插入排序是乙個有效的演算法。工作方式像許多人排序一副撲克牌,開始時,我們的左手為空並且桌子上的牌面向下。然後,我們每次從桌子上拿走一張牌並將它插人左手中正確的位置。為了找到一張牌的正確位置,我們從右...

經典演算法之插入排序

一 基本思路 將乙個待排序的記錄,按照關鍵字大小插入到前面已經拍好的子串行的適當位置,直到全部記錄插入完成為止。如果序列基本有序,效率很高。二 include stdafx.h include includeusing namespace std void swap int a,int b void...

經典演算法之插入排序

問題 有一陣列a,長度為n,把陣列中的元素小到大重新排列。思路 我們把陣列分為已排序和未排序兩部分,把未排序的元素一次乙個插入到已排序部分的合適位置上。已排序部分逐漸增大,直到整個陣列變成有序的。一趟排序 假設從第n個元素開始是無序的,而其前面n 1個元素是有序的。把a n 取出來放入temp中。然...