堆排序

来源:互联网 发布:加油站软件app 编辑:程序博客网 时间:2024/05/22 08:03

百科解释

堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。

个人理解

适用于多数据操作或多数据排序的时候。

代码

#include<cmath>#define ll long longvoid up(ll p){    while ((p>1)&&(f[p]>f[p/2]))    {        swap(f[p],f[p/2]);        p/=2;    }}void down(ll p){    ll q;    while ((p*2<=num)&&(f[p*2]>=f[p])||(p*2+1<=num)&&(f[p*2+1]>=f[p]))    {        q=p*2;        if (f[p*2+1]>=f[p*2])            q++;        swap(f[p],f[q]);        p=q;    }}void insert(ll t){    num++;    f[num]=t;    up(num);}void dele(ll p){        if (f[num]<f[p])        {                f[p]=f[num];                num--;                down(p);        }         else        {                f[p]=f[num];                num--;                up(p);        }}
0 0
原创粉丝点击