堆排序及堆的插入,删除等
来源:互联网 发布:脸萌软件是什么软件 编辑:程序博客网 时间:2024/05/21 14:01
static void Heap_Sort(int[] a) //堆排序
{
int max=a.Length;
Heap_Make(a,max);
for (int i = max - 1; i > 0; i--)
{
swap(a, 0, i);
Heap_Del(a, 0, i);
}
Console.Write("堆排序结果:");
outprint(a);
}
static void Heap_Insert(int[] a, int i) //堆的插入
{
int parent=(i-1)/2;
int temp = a[i];
while(parent >= 0&&i!=0)
{
if (a[parent] <= a[i])
break;
a[i] = a[parent];
i = parent;
parent = (i - 1) / 2;
}
a[i] = temp;
}
static void Heap_Del(int[] a, int i, int max) //堆下沉操作,max是数组长度,i是调整序号
{
int child = 2 * i + 1;
int temp = a[i];
while(child<max)
{
if (child + 1 < max && a[child + 1] < a[child])
child++;
if (a[child] >= temp)
break;
a[i] = a[child];
i = child;
child = 2 * i + 1;
}
a[i] = temp;
}
static void Heap_Make(int[] a ,int max) //堆化数组
{
for (int i = (max-1) / 2 ; i >= 0; i--)
{
Heap_Del(a, i, max);
}
Console.Write("堆化数组结果:");
outprint(a);
}
static void Main(String[] args)
{
int[] b = { 0, -1, 5, -8, 58, 0, 98 };
int[] a = { 9, 12, 17, 30, 50, 20, 60, 65, 4, 49 } ;
int[] c={0,12,54,58,62,456,578};
Heap_Sort(a);
Console.Read();
}
}
{
int max=a.Length;
Heap_Make(a,max);
for (int i = max - 1; i > 0; i--)
{
swap(a, 0, i);
Heap_Del(a, 0, i);
}
Console.Write("堆排序结果:");
outprint(a);
}
static void Heap_Insert(int[] a, int i) //堆的插入
{
int parent=(i-1)/2;
int temp = a[i];
while(parent >= 0&&i!=0)
{
if (a[parent] <= a[i])
break;
a[i] = a[parent];
i = parent;
parent = (i - 1) / 2;
}
a[i] = temp;
}
static void Heap_Del(int[] a, int i, int max) //堆下沉操作,max是数组长度,i是调整序号
{
int child = 2 * i + 1;
int temp = a[i];
while(child<max)
{
if (child + 1 < max && a[child + 1] < a[child])
child++;
if (a[child] >= temp)
break;
a[i] = a[child];
i = child;
child = 2 * i + 1;
}
a[i] = temp;
}
static void Heap_Make(int[] a ,int max) //堆化数组
{
for (int i = (max-1) / 2 ; i >= 0; i--)
{
Heap_Del(a, i, max);
}
Console.Write("堆化数组结果:");
outprint(a);
}
static void Main(String[] args)
{
int[] b = { 0, -1, 5, -8, 58, 0, 98 };
int[] a = { 9, 12, 17, 30, 50, 20, 60, 65, 4, 49 } ;
int[] c={0,12,54,58,62,456,578};
Heap_Sort(a);
Console.Read();
}
}
0 0
- 堆排序及堆的插入,删除等
- 堆的插入 删除 排序
- 堆插入、删除、排序
- 堆的插入、删除、修改、排序
- Java-最大堆的排序,插入,删除
- 堆的建立、删除、插入操作以及堆排序
- 最大堆的插入 删除 初始化 堆排序
- 堆的插入、删除和建立操作,堆排序
- 堆的插入、删除和建立操作,堆排序
- 堆的构建、堆的插入、堆的删除、堆排序
- 二叉堆 删除 插入 调整 堆排序
- 堆排序/插入/删除 整理
- 堆与堆排序、二叉堆定义、对的插入与删除
- 最大堆,最小堆插入/删除以及最大堆的排序
- Java实现堆的封装,进行插入,调整,删除堆顶以完成堆排序实例
- 堆与堆排序、二叉堆定义、对的插入与删除
- 堆排序之堆的概念—插入、删除、建堆
- 最大堆的初始化、删除、插入等基本操作
- android--线程池
- c++ protected 访问权限
- Linux之ubuntu学习笔记(七):操作进程
- java 环境变量设置
- win7 eclipse调用虚拟机ubuntu部署的hadoop2.2.0伪分布(1)
- 堆排序及堆的插入,删除等
- UVa #10603 Fill (例题7-8)
- python true false
- 完整SQL分页存储过程(支持多表联接)
- 数据库索引的实现原理
- GLSL部分汇总
- Hibernate @SequenceGenerator的注解介绍
- Stack的三种含义
- 第十六周 【项目4-为动态数组扩容】