過程:原文出自白話shell
以n=10的乙個陣列49, 38, 65, 97, 26, 13, 27, 49, 55, 4為例
第一次 gap = 10 / 2 = 5
49
3865
9726
1327
495541
a1b2a2b
3a3b
4a4b
5a5b
1a,1b,2a,2b等為分組標記,數字相同的表示在同一組,大寫字母表示是該組的第幾個元素, 每次對同一組的資料進行直接插入排序。即分成了五組(49, 13) (38, 27) (65, 49) (97, 55) (26, 4)這樣每組排序後就變成了(13, 49) (27, 38) (49, 65) (55, 97) (4, 26),下同。
第二次 gap = 5 / 2 = 2
排序後
13
2749554
4938
6597
261a 1b 1c1
d1e2a 2b 2c2d2e
第三次 gap = 2 / 2 = 1
4
2613
2738
4949
5597
651a 1b 1c1
d1e1f 1g 1h 1
i1j
用自己的話說:把拿到的陣列假定為n,每一次定義乙個增量,然後在該增量內,對分出來的子陣列進行插入排序,直到增量為1的時候進行最後一次增量排序,在有排序基礎的上進行插入排序的時候最快。
}根據上面的**可以比較容易理解shell排序,縮減後的**如下:
public
int shortsort(int a)
a[l+g]=v;
}}
}
return a;
}
演算法複雜度: 一頭紮進演算法導論 氣泡排序
定義 交換排序的基本思想是,通過比較兩個記錄鍵值的大小,如果這兩個記錄鍵值的大小出現逆序,則交換這兩個記錄,這樣將鍵值較小的記錄向序列前部移動,鍵值較大的記錄向序列後部移動。假設陣列總長度是n,那麼總共需要重頭開始執行n 1次 過程 用自己的話說 1.先判斷一共執行多少次,假設陣列總長度是n,則一共...
一頭紮進演算法導論 插入排序
定義 直接插入排序是一種簡單的排序方法,她的基本思想是依次將每個記錄插入到乙個已排好序的有序表中去,從而得到乙個新的 記錄數增加1的有序表,就好比鬥地主抓牌排序的這麼乙個過程 過程 用自己的話說 用乙個索引key表示當前捉到的牌,如圖中紅框所示。用乙個索引i表示已經排序好的牌 從key牌左邊開始輪詢...
一頭紮進sql之多表操作
select a.ename,a.conn from emp a where a.conn select b.conn from emp b where b.ename allen select a.ename,a.conn from emp a where coalesce a.conn,0 se...