【发布时间】:2018-08-18 06:31:34
【问题描述】:
这段代码的复杂度是多少?我认为它是 O(n lgn),但我对时间复杂度相对较新,所以我只想确定一下。我很确定你也可以使用 maxHeap 来获得相同的结果,但我发现使用 minHeap 更直观。(我刚刚编辑了这个)
def minHeap(array, n, i): #creates minHeap of array and returns it
smallest = i
left = 2*i+1
right = 2*i+2
if left < n:
if array[smallest] > array[left]:
smallest = left
if right < n:
if array[smallest] > array[right]:
smallest = right
if smallest <> i:
array[smallest] , array[i] = array[i], array[smallest]
minHeap(array, n, left)
minHeap(array, n, right)
minHeap(array, n, i)
return array
else:
if left < n:
minHeap(array, n, left)
if right < n:
minHeap(array, n, right)
if left < n:
if array[smallest] > array[left]:
smallest = left
if right < n:
if array[smallest] > array[right]:
smallest = right
if smallest <> i:
array[smallest] , array[i] = array[i], array[smallest]
return array
def heapSort(arr): #the actual sorting algorithm that uses a minHeap
minheap = minHeap(arr, len(arr), 0)
sortedarray = []
for n in range(0,len(arr)):
sortedarray.append(minheap[0])
minheap[0], minheap[-1] = minheap[-1], minheap[0]
minheap.pop(-1)
minheap = minHeap(minheap, len(minheap), 0)
return sortedarray
【问题讨论】:
-
minHeap()应该做什么?因为minHeap([2, 3, 4, 1], 4, 0)没有构建堆,这似乎是有效的输入。 -
dhke- 我刚刚编辑了我的 minHeap() 代码,所以它现在应该可以工作了
-
No, it's still not making a min heap. 这看起来根本不像一个最小堆数据结构——没有堆推送或堆弹出操作。看起来
minHeap唯一正确的是将最小元素放在前面,这恰好是 not-actually-a-heapsortheapSort唯一依赖的东西。
标签: python sorting data-structures heapsort