一頭紮進演算法導論 shell排序

2021-07-24 02:38:55 字數 1364 閱讀 2533

過程:原文出自白話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...