堆排序

来源:互联网 发布:百度网盘无限试用 mac 编辑:程序博客网 时间:2024/06/07 11:55

堆排序分为变成大根堆还是小根堆;

大根堆就是跟节点大于左右子节点就ok,小根堆跟它相反,根节点小于左右子节点;

有一个无序的树(就是你要排序的数组,放在树里),你想要对它进行排序的话,首先要确定从大到小还是从小到大,因为这个分别对应大根堆还是小跟堆;

随便说一个,就说变成大根堆(从大到小):首先一个无序的树,你找到最下面一层的节点,每两个子节点或一个子节点和他们的父节点都看成一个单位,在这一个单位中进行变化,变成我们要的大根堆,就是把这三个数或者两个数中大的树变成父节点,然后再把交换的两个节点分别对应的另两个单元依次像这样维护一下,因为你这个单元的父节点可能是别的单元的子节点,同样你这个单元的子节点也可能是别的单元的父节点,所以最后维护完之后为大根堆;

然后每次取出根节点放在结果数组中,然后再把树中最下面的数放在根节点的位置上,再进行维护;

时间复杂度为nlogN;

因为总共取n个数,每次维护为logN,所以为nlogN;

0 0
原创粉丝点击