算法,一直是我想去大公司路上的一塊絆腳石,總覺得平時用不到,但是考試總要考,不管是否能用到,學習總歸是好事,前不久買了本《算法導論》接下來的日子,我會把自己看到的關(guān)于算法東西寫出來,用羅胖的話就是,讀書是一件苦事,死磕自己,娛樂大家。
一、插入排序
先上偽代碼:
INSERTION-SORT(A)
1.for j=2 to A.length
2. ? key = A[j]
3. ? //Insert A[j] into the sorted sequence A[1..j-1]
4. ? i = j - 1
5. ? while i > 0 and A[i] > key
6. ? ? ? A[i+1] = A[i]
7. ? ? ? i = i -1
8. ? ? A[i+1] = key
聽名字就容易理解,“插入”就像排隊一樣,最起碼你前面有一個人,你插隊插在他前面,才叫插入。因此,for循環(huán)就從j=2(本文是根據(jù)讀《算法導論》編寫,因此下標統(tǒng)一從1開始),也就是第二個數(shù)開始。排序肯定涉及到交換,交換肯定涉及到中間變量,第二行key就是這個中間變量。從隊尾的前一個開始比較,因此第四行:i = j - 1,交換的條件要滿足不能超過數(shù)組的一個,而且待排序的數(shù)要比前面的值大才能交換。接下來就是插入排序的精髓:尾部和倒數(shù)第二個交換后,之前的尾部(也就是現(xiàn)在的倒數(shù)第二個數(shù))還是待排序(此時表示排序完成),因此它要和倒數(shù)第三個數(shù)進行比較,這時的待比較的下標就變?yōu)閕 = i-1,第7行和第8行應該可以換位置,只不過如果換位置A[i+1] = key就要變?yōu)锳[i] = key.
ok,這就是插入排序了,過程就像打撲克的起牌過程,手里的牌由少變多,依次插入。