插入排序在我們生活中很常見,比如玩撲克牌,左手拿牌,右手取排。從第1張牌開始,左手的撲克牌按照大小順序對號入座,構成乙個暫時的有序陣列a。這時,右手從桌子上取到的一張牌,相當於陣列的乙個元素,記作b。桌子上還未取的牌組成了乙個無序陣列c。我們可以把[a,b,c]看作乙個整體的陣列m,那麼問題轉換為常見到的對陣列m中的各個元素進行插入排序。
這樣考慮插入排序,相信會很好理解。
(1)《演算法導論》給出的偽**如下:
(2)根據偽**,我們編寫c++程式來實現,基本是照搬,注釋也寫得很清楚。
1 #include 2(3)排序的選擇using
namespace
std;
3int
main()
412 cout <
13//
開始排序
14for(j=1;j<10;j++)
1523 a[k+1]=b;//
跳出while迴圈,移位結束,將b插入停止位 24}
25//
輸出資料
26for(n=0;n<10;n++)
2730
return0;
31 }
部落格上有大神對於插入排序與選擇排序運算時間的討論,結論:在大部分有序的情況下插入排序是效率最高的演算法。
演算法導論學習筆記 1 基礎排序演算法
最近從頭開始學習演算法導論,作為乙個非計算機專業的學生,我的目的也就是為了找工作的時候能多點籌碼 但是學習過程中還是有不少收穫的,順便也能練習下python程式設計水平,因此記錄下學習內容 第一章是演算法基礎,這裡介紹了2種排序方法 插入排序和歸併排序 例子還算比較淺顯易懂。對於插入排序,可以用乙個...
演算法導論學習筆記 (1)
乙個acm若菜,趁著acm淡季,開始學習演算法導論了,經過一年的acm學習,逐漸的發現,學東西,深入才是王道,以前學習乙個演算法,總是看懂了就開始做題,到後來才發現很多題目,會演算法,卻不知道是用這個演算法,這就是演算法理解的不到位的後果,從今天開始,定下目標 1.深入系統的學習演算法,2.學會紙上...
《演算法導論》學習筆記(1)
時間複雜度 time complexity 0,1,1,2,3,5,8,13,21,34 數列中每個數都是其兩個直接前項的和。f nf fn 的生成規則 f n left f f n 1 1 n 1 0 n 0 end right.fn fn 1 fn 1 10 n 1n 1n 0 fibonacc...