算法筆記(九):希爾排序和桶排序

(一)希爾排序shell

先將整個待排記錄序列分割成若干個子序列,而後分別進行直接插入排序,待整個序列中的數據基本有序時,再對全體記錄進行一次直接插入排序。具體作法是:app

1)   算出增量序列spa

2)   根據增量序列對待排記錄進行直接插入排序code

 1 #希爾排序
 2 def shellSort(A):
 3     k = len(A)
 4     incremental = []
 5     #算出增量序列
 6     while (k > 1):
 7         k = k // 2
 8         incremental.append(k)
 9     dk = 0 #增量序列incremental的初始索引值
10     while(dk < len(incremental)):
11         #根據增量序列對列表進行插入排序
12         for i in range(0,len(A),incremental[dk]) :
13             key = A[i]
14             j = i - incremental[dk]
15             while j >= 0 and key < A[j]:
16                 A[j+incremental[dk]] = A[j]
17                 j -= incremental[dk]
18             A[j+incremental[dk]] = key
19         dk += 1
20     return A

 

(二)桶排序blog

 1 #桶排序
 2 def bucketSort(A):
 3     n = max(A)
 4     B = [0]* (n+1) #建立新的列表
 5     for i in A: #B[i] 的值+1
 6         B[i]  += 1
 7     A = [] #清空列表A
 8     #根據列表B,依次輸出元素,添加到列表A中
 9     for i in range(len(B)):
10         if B[i] != 0 :
11             for k in range(B[i]):
12                 A.append(i)
13     return A
14 
15 
16 A = [1,12,720,328,278,356,789,234,123,113,113,9999,789,999,8999]
17 
18 print(bucketSort(A))
相關文章
相關標籤/搜索