1991年的计算机先驱奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德(Robert W.Floyd)和威廉姆斯(J.Williams)在1964年共同发明了著名的堆排序算法( Heap Sort )。堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。
上图的左图是堆的构造过程,右图是下沉操作。堆排序的主要操作在第二阶段完成。这里我们将堆最大元素删除然后放入堆缩小后空出的位置中。我们发现,这个过程与选择排序很相似,但是需要的比较次数要少得多。
[程序输出]
排序前:B F S R T J D A Z V Y H K I P Q C G N U M E O 排序后:A B C D E F G H I J K M N O P Q R S T U V Y Z
新闻热点
疑难解答