終於開始寫演算法了…由於自己最生疏的就是插入排序所以先寫插入= =
我們先來看下插入排序是怎麼實現的
(以公升序排序為例)
給出一組數如下:可以想象一下洗牌的過程 不停的往前比較插入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中。然...