堆初始化和堆排序

最近刷笔试题的时候遇到:某堆初始化的结果,某堆排序后的结果。

之前学数据结构的时候已经学过,然而没有牢固的影响,在这里做笔记。以免自己再忘却。

 

 

首先,堆是完全二叉树却不是二叉查找树。

所以对堆进行初始化,只是找出了第一个最大的(最大堆),或者最小的值(最小堆)。

举个例子:设有一个无序序列 { 1, 3, 4, 5, 2, 6, 9, 7, 8, 0 }。(接下来参考大佬的博客的图)

堆初始化和堆排序_第1张图片

很明确的看出来:

先建立一个完全二叉树。

建树之后按照从最后往前的顺序,不断的进行一个选择交换。

最终找到了最大的交换到了根节点。(这也就是为什么堆排序是选择排序。它都是每次找到最大或者最小)

上面就完成了堆的初始化。

所以初始化后的序列【9,8,6,7,2,1,4,3,5,0】

 

而接下来整个堆排序的过程大概如下:

1.把根节点和末尾结点交换,并且弹出末尾点。  所以弹出9,这个9就存储进了数组里。 数组第一个值(最大值)就排序好了。

2.接下来按照初始化的方法,继续排序。

重复1··2 一直到堆为空。

至此,每次弹出去的都是最大值,9,8,7,6·······

整个数组堆排序完成。

详细图如下:

 

 

堆初始化和堆排序_第2张图片

 

 

 

 

你可能感兴趣的:(排序)