【发布时间】:2021-08-13 01:39:36
【问题描述】:
import math
def insertionSort(arr):
for i in range(len(arr)-1):
for j in range(i+1, len(arr)):
if arr[j] < arr[i]:
arr[j], arr[i] = arr[i], arr[j]
return arr
def bucketSort(arr):
no_of_buck = round(math.sqrt(len(arr)))
bucketArr = [[] for _ in range(no_of_buck)]
n = len(bucketArr)
maximumVal = max(arr)
for i in arr:
appropriate_bucket = math.ceil(i * n / maximumVal)
bucketArr[appropriate_bucket-1].append(i)
for i in bucketArr:
i = insertionSort(i)
arr = []
for i in bucketArr:
arr.extend(i)
print(arr)
插入排序本身是一个 O(n^2) 操作,外循环上升到元素数量的平方根,即 O(sqrt(n)),所以它应该是 O(log(n) * n^2 )
【问题讨论】:
-
sqrt(n) 不是 O(log(n))。对数的增长比多项式慢得多。
标签: python-3.x sorting data-structures bucket-sort