三叉堆实现
来源:互联网 发布:简单游戏编程java 编辑:程序博客网 时间:2024/04/29 01:28
void fixDown1(int a[],int k,int n)
{
int j;
while (3*k <= n)
{
j = 3*k;
if ((j +1<= n)&&(a[j] < a[k])&&(a[j-1]<a[k])&&(a[j+1]<a[k]))
{
break;
}
int max = 0;
if ((j <= n)&&(a[j] < a[j-1]))
{
max =j-1;
}
else if ((j <= n)&&(a[j] >= a[j-1]))
{
max = j;
}
if ((j+1 <= n)&&(a[j+1] > a[max]))
{
max = j+1;
}
if (a[max] > a[k])
{//childer swap parent;这儿导致排序不稳定的结果的
int temp = a[max];
a[max] = a[k];
a[k] = temp;
}
k = max;
}
if (3*k-1 <= n)
{
j = 3*k-1;
if (a[j] > a[k])
{
int temp = a[j];
a[j] = a[k];
a[k] = temp;
k = j;
}
}
}
void heapsort1(int a[],int l,int r)
{//三叉堆
int k,sum = r-l+1;
for (k = ceil(sum/3.0);k >=1; k--)
{
fixDown1(g_array, k, sum);
}
while (sum > 1)
{
int temp = g_array[1];
g_array[1] = g_array[sum];
g_array[sum] = temp;
fixDown1(g_array, 1, --sum);
}
}
{
int j;
while (3*k <= n)
{
j = 3*k;
if ((j +1<= n)&&(a[j] < a[k])&&(a[j-1]<a[k])&&(a[j+1]<a[k]))
{
break;
}
int max = 0;
if ((j <= n)&&(a[j] < a[j-1]))
{
max =j-1;
}
else if ((j <= n)&&(a[j] >= a[j-1]))
{
max = j;
}
if ((j+1 <= n)&&(a[j+1] > a[max]))
{
max = j+1;
}
if (a[max] > a[k])
{//childer swap parent;这儿导致排序不稳定的结果的
int temp = a[max];
a[max] = a[k];
a[k] = temp;
}
k = max;
}
if (3*k-1 <= n)
{
j = 3*k-1;
if (a[j] > a[k])
{
int temp = a[j];
a[j] = a[k];
a[k] = temp;
k = j;
}
}
}
void heapsort1(int a[],int l,int r)
{//三叉堆
int k,sum = r-l+1;
for (k = ceil(sum/3.0);k >=1; k--)
{
fixDown1(g_array, k, sum);
}
while (sum > 1)
{
int temp = g_array[1];
g_array[1] = g_array[sum];
g_array[sum] = temp;
fixDown1(g_array, 1, --sum);
}
}
- 三叉堆实现
- 算法导论 思考题 6-2 三叉堆实现
- 三叉链表实现-二叉树
- 三叉链表实现二叉树
- 二叉树三叉链表实现类
- 二叉树实现类 —— 三叉链表实现
- VC++ 6.0中实现三叉切分窗口与多视图
- 数据结构:二叉树的三叉链表存储--Java实现
- 二叉树的三叉链表存储及其Java实现
- 二叉树的三叉链表存储(java实现)
- 看数据结构写代码(27) 三叉链表的实现
- 三叉链表实现二叉树基本操作
- 二叉树的三叉链表存储及其Java实现
- VC++ 6.0中实现三叉切分窗口与多视图实现
- 平衡二叉树实现(三叉链表 平衡因子方式实现)
- HDOJ-2222 Keywords Search 字典树+AC自动机(三叉树实现字典树)
- 二叉树的三叉链表存储结构的简单实现
- 数据结构之---C语言实现二叉树的三叉链表存储表示
- Magento 移除block
- arcgis javascript api 中实现 根据一个点画出一个指定半径的圆,并且查询图层,绘制出落入这个圆中的空间对象
- 32/64位平台printf uint64的方法
- uva 11292 Dragon of Loowater (勇者斗恶龙)
- KindEditor编辑器的图片上传问题
- 三叉堆实现
- CodeForces 300A Aarry
- java中equals方法和“==”的比较
- 如何开好迭代回顾会议(2)准备、工具
- Exchange 2010 邮箱大小限制原则
- 我的第一次C++完成
- 第7周项目1-求圆柱表面积
- C++虚函数的调用
- 第7周项目1-求圆柱表面积