堆排序
来源:互联网 发布:linux xargs cat命令 编辑:程序博客网 时间:2024/06/02 00:31
public class 堆排序 {
public static void main(String[] args)
{
int[] arr = { 0, 9, 4, 3, 8, 6 ,12};
HeapSort(arr);
for (int i : arr) {
System.out.println(i);
}
}
// 堆排序的方法
public static void HeapSort(int[] a)
{
int n = a.length - 1;
// 循环
while (n > 1)
{
for (int k = n/2; k > 0; k--)
{
// 建立大根堆 堆顶元素最大
if (a[k] <= a[2 * k])
{
// 交换
int temp = a[k];
a[k] = a[2 * k];
a[2 * k] = temp;
}
if (2 * k + 1 <= n && a[k] <= a[2 * k + 1])
{
// 交换
int temp = a[k];
a[k] = a[2 * k + 1];
a[2 * k + 1] = temp;
}
// 堆顶元素 a[1] 与最后一个交换
}
// a[n]与啊a[1]交换
int s = a[1];
a[1] = a[n];
a[n] = s;
n--;
}
}
}
public static void main(String[] args)
{
int[] arr = { 0, 9, 4, 3, 8, 6 ,12};
HeapSort(arr);
for (int i : arr) {
System.out.println(i);
}
}
// 堆排序的方法
public static void HeapSort(int[] a)
{
int n = a.length - 1;
// 循环
while (n > 1)
{
for (int k = n/2; k > 0; k--)
{
// 建立大根堆 堆顶元素最大
if (a[k] <= a[2 * k])
{
// 交换
int temp = a[k];
a[k] = a[2 * k];
a[2 * k] = temp;
}
if (2 * k + 1 <= n && a[k] <= a[2 * k + 1])
{
// 交换
int temp = a[k];
a[k] = a[2 * k + 1];
a[2 * k + 1] = temp;
}
// 堆顶元素 a[1] 与最后一个交换
}
// a[n]与啊a[1]交换
int s = a[1];
a[1] = a[n];
a[n] = s;
n--;
}
}
}
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- 机器学习理论与实战(八)回归
- python的时间处理模块 time
- 命名管道(FIFO)聊天程序
- 透过sax解析浅谈设计模式
- 如何遍历读取文件夹内所有图片并处理
- 堆排序
- POJ 3900 The Robbery (dfs暴搜+剪枝)
- VMware虚拟机安装MAC OS X Mountain Lion详细图文教程
- [c#基础教程]C# 特性(Attribute)详细介绍
- 继承的本质(读《你必须知道的.net》记录笔记)
- hibernate注解的实现原理之1
- 八皇后排序,92种
- 透明窗口和窗口阴影
- 多线程中出现的一个面试题