我不认为HeapSort被认为是“分而治之”,因为算法不会将问题细分为子问题。执行 HeapSort 算法执行ExtractMin或ExtractMax直到 Heap 为空。这些行动是O(logn)因为之后的每个ExtractMin或ExtractMax将Heap要做的Heapify,以十个分量它的偏序。最后有一个成本,O(nlogn)因为它确实n ExtractMin或ExtractMax。
这是一个伪代码
HeapSort()
heap
new_ ordered_collection
while(heap.NotEmpty)
new_ ordered_collection.add(heap.ExtractMin)//or ExtractMax
heap.Heapify //could be MaxHeapify or MinHeapify
return new_ ordered_collection
Run Code Online (Sandbox Code Playgroud)
注意ExtractMin和ExtractMax弹出堆的最小或最大元素。
如您所见,我没有看到“分而治之”的策略。
但是heap.Heapify根据堆的偏序对元素重新排序。这个定义了每个节点和他的两个孩子之间的关系,因此,heap.Heapify应用了“分而治之”的策略,但这是DataStructre本身没有的算法。
冒泡排序是一种naive算法。
| 归档时间: |
|
| 查看次数: |
4181 次 |
| 最近记录: |