堆排序以及TopK大顶堆小顶堆求解方式(js版)
我理解的堆排序
堆排序是一种选择排序,时间复杂度o(nlogn),空间复杂度o(1)。
数据结构底层是数组,通过索引之间的关系可看二叉树,父结点总是大于或者小于孩子结点。这就是堆的结构。
刚初始完的堆是占据整个数组的。
开始排序后,数组分为两个部分!前面是堆,后面是已排序完的有序子数组。
排序时,堆顶元素和堆尾元素会交换,有序子数组长度+1,堆长度-1;此时,原堆尾元素占据了堆顶,可能会破坏了堆结构,所以,需要堆化,也就是堆顶元素要保持最大或者最小。
当堆只有一个元素,自动加入有序子数组;这时有序子数组占
原创
2021-02-28 00:28:35 ·
681 阅读 ·
0 评论