堆排序的本质
来源:互联网 发布:unity3d spine2d插件 编辑:程序博客网 时间:2024/05/22 07:56
堆排序的本质就是完全二叉树部分性质的应用。子树定点大于等于左右子树的根节点。左右子树的根节点顺序无要求。
2个注意点 1> 核心 调整后 若破坏了子树的堆特征,需要重新调整
2>完全二叉树的非叶子节点数求法 (很简单)
/*
a 数组名s 节点在数组中的索引号
n 数组的大小
*/
void heapadjust(int a[],int s,int n)
{
int j.t;
while(2*s+1 < n)
{
j=2*s+1;
if((j+1) < n)
{
if(a[j]<a[j+1])//左子树小于右子树,则需要比较右子树
j++;// 指向右子树
}
if(a[s] < a[j]) //比较s与j为序号的数据
{
t=a[s];
a[s]=a[j];
a[j]=t;
s=j;//子树堆被破坏,需要重新调整
}
else //比较左右孩子均小则堆未被破话 ,无需调整
break;
}
}
void heapsort(int a[],int n)
{
int t,i;
int j;//
//逐个处理完全二叉树的非叶子节点,构成自堆
for(i= n/2 -1; i>=0; i--)
{
heapadjust(a,i,n);
}
for(i=n-1;i>0;i--)
{
t=a[0];
a[0]=a[i];
a[i]=t;//将最大节点值放在数组末尾
heapadjust(a,0,i);//将a[0]至a[i]重新调整为堆
}
}
- 堆排序的本质
- 索引的本质是排序
- 堆的建立&堆排序
- 【堆/排序】堆排序的两种建堆方法
- 简单的排序---堆排序
- 堆排序 - 不稳定的排序
- 堆排序的实现
- 堆排序的实现
- 堆的排序
- 堆的排序
- 堆的排序
- 堆排序的实现
- 基于堆的排序
- 堆的排序
- 堆排序的实现
- 堆排序的实现
- 堆排序的几个问题
- 堆排序的实现
- 一些杂七杂八的问题
- C,C++可变长参数实现
- 时间序列分析之四:模型定阶
- 回调设计模式
- 时间序列分析之五:几种建模方法
- 堆排序的本质
- 时间序列分析之六:应用
- http://ranfeng0610.blog.163.com/blog/static/185708284201251524110617/
- 斜杠与反斜杠
- ZOJ 3736 Pocket Cube
- ASM 启动报错 ORA-27300, ORA-27301 and ORA-27302: failure occurred at: sskgpsemsper 解决方法
- ActionBar上添加UI
- 菜鸟学SSH(四)——Struts2拦截器
- JUnit4 学习总结