`
lynnlysh
  • 浏览: 175821 次
  • 性别: Icon_minigender_2
  • 来自: 天津
社区版块
存档分类
最新评论

java 实现最小二叉堆排序

阅读更多
写在前面:
一觉醒来,我就突然有灵感了......
最小二叉堆定义:
二叉堆是完全二元树或者是近似完全二元树,最小二叉堆是父结点的键值总是小于或等于任何一个子节点的键值的堆堆。
存储:
二叉堆一般用数组来表示。
根节点在数组中的位置是0,第n个位置的子节点分别在2n+1和 2n+2;
位置k的叶子的父节点位置为(k-1)/2;
实现:
	/**
	 * @description 元素添加到末尾,和它的父节点比,如果比它小就交换
	 * @param array
	 * 
	 * @author LynnWong
	 */
	private int[] getMinBinaryHeap(int[] array){
		int N = array.length;
		int minBinaryHeap[] = new int[N];
		int root;//根的值
		int heapSize = 0;//记录插入位置
		for(int num : array){
			minBinaryHeap[heapSize]=num;
			++heapSize;
			int pointer = heapSize-1;//当前指向的数组元素位置
			while(pointer!=0){
				int leafPointer = pointer;//叶子节点位置
				pointer = (pointer-1)/2;//根节点位置
				root = minBinaryHeap[pointer];//根节点
				if(num>=minBinaryHeap[pointer]){//永远把当前数组元素看成叶子与其根比较或者换位
					break;
				}//如果根比叶子大 就交换位置
				minBinaryHeap[pointer] = num;
				minBinaryHeap[leafPointer] = root;
				
			}
		}
		return minBinaryHeap;
		
	}

	/***
	 * 用随机数测试二叉堆排序
	 * 测试10遍,强迫症似的变态...
	 */
	public void text(){
		for(int i=0;i<10;i++){
			Random rnd = new Random(); 
			int [] lala = {rnd.nextInt(6),rnd.nextInt(6),rnd.nextInt(6),rnd.nextInt(6),rnd.nextInt(6),rnd.nextInt(6)};
			System.out.print("输入:");
			for(int a : lala){
				System.out.print(a+" ");
			}
			System.out.println();
			int []array = this.getMinBinaryHeap(lala);
			System.out.print("输出:");
			for(int a : array){
				System.out.print(a+" ");
			}
			System.out.println();
		}
	}

***********************大学不好好学习的格叽格叽*******************************
2013的第一篇,lysh  新年快乐!
分享到:
评论

相关推荐

    二叉堆最小堆的Java实现

    个人实现的最小权重的二叉堆实现,效率很高,适合任意场合下的临时列表排序。 可在外部写脚本对该文件进行测试 需要继承Tuple类实现排序对象类型,并实现Tuple的抽象方法weight()来反映排序对象权重

    深入解析堆排序的算法思想及Java代码的实现演示

    堆排序基于二叉堆结构即完全二叉树,可利用最大堆和最小堆的组建方式来进行排序,这里就来深入解析堆排序的算法思想及Java代码的实现演示

    leetcode三角形打印-DataStructuresInJava:用Java实现各种数据结构和算法

    还包括一个堆排序的方法 图算法 存储无向图和有向图 添加和获取边和顶点的方法。 邻接表表示。 BFS 分布式文件系统 最小生成树 Prim 算法 使用 UnionFind 的 Kruskal 算法 Dijkstra 最短路径算法 图上一些leetcode...

    DataStructureDeepImpl:基于Java的数据结构深度实现(通用实用程序)

    二叉堆二项式堆D堆斐波那契堆索引堆左派堆对堆队列基于数组的队列基于链表的队列阻塞队列循环队列具有最大值的队列具有最小值的队列使用两个堆栈实现的队列队列排序一个阵列中的三个队列堆基于数组的堆栈基于链表的...

    数据结构与算法分析Java语言描述(第二版)

    优先队列(堆)6.1 模型6.2 一些简单的实现6.3 二叉堆6.3.1 结构性质6.3.2 堆序性质6.3.3 基本的堆操作6.3.4 其他的堆操作6.4 优先队列的应用6.4.1 选择问题6.4.2 事件模拟6.5 d-堆6.6 左式堆6.6.1 左式堆性质...

    数据结构与算法分析_Java语言描述(第2版)]

    优先队列(堆)6.1 模型6.2 一些简单的实现6.3 二叉堆6.3.1 结构性质6.3.2 堆序性质6.3.3 基本的堆操作6.3.4 其他的堆操作6.4 优先队列的应用6.4.1 选择问题6.4.2 事件模拟6.5 d-堆6.6 左式堆6.6.1 左式堆性质6.6.2 ...

    数据结构与算法分析 Java语言描述第2版

    优先队列(堆)6.1 模型6.2 一些简单的实现6.3 二叉堆6.3.1 结构性质6.3.2 堆序性质6.3.3 基本的堆操作6.3.4 其他的堆操作6.4 优先队列的应用6.4.1 选择问题6.4.2 事件模拟6.5 d-堆6.6 左式堆6.6.1 左式堆性质6.6.2 ...

    数据结构与算法分析_Java_语言描述

    小结 练习 参考文献 第6章 优先队列(堆) 6.1 模型 6.2 一些简单的实现 6.3 二叉堆 6.3.1 结构性质 6.3.2 堆序性质 6.3.3 基本的堆操作 6.3.4 其他的堆操作 6.4 优先队列的应用 6.4.1 选择问题 6.4.2...

    数据结构与算法分析-Java语言描述(第2版)_2_2

    小结 练习 参考文献第6章 优先队列(堆) 6.1 模型 6.2 一些简单的实现 6.3 二叉堆 6.3.1 结构性质 6.3.2 堆序性质 6.3.3 基本的堆操作 6.3.4 其他的堆操作 6.4 优先队列的应用 6.4.1 选择问题...

    数据结构与算法分析-Java语言描述(第2版)_1_2

    小结 练习 参考文献第6章 优先队列(堆) 6.1 模型 6.2 一些简单的实现 6.3 二叉堆 6.3.1 结构性质 6.3.2 堆序性质 6.3.3 基本的堆操作 6.3.4 其他的堆操作 6.4 优先队列的应用 6.4.1 选择问题...

    数据结构与算法分析_Java语言描述(第2版)

    6.3 二叉堆 6.3.1 结构性质 6.3.2 堆序性质 6.3.3 基本的堆操作 6.3.4 其他的堆操作 6.4 优先队列的应用 6.4.1 选择问题 6.4.2 事件模拟 6.5 d-堆 6.6 左式堆 6.6.1 左式堆性质 6.6.2 左式堆操作 6.7 斜堆 6.8 二...

    数据结构(C语言版)\Java数据结构和算

    7.6 堆排序 7.7 多关键字排序 7.8 链表排序和索引表排序 7.9 内部排序小结 7.10 外部排序 7.11 参考文献和选读材料 第8章 Hash法 8.1 引言 8.2 静态Hash法 8.3 动态Hash法 8.4 Bloom滤波器 8.5 参考文献...

    Betelgeuse:用于编码面试、挑战等的 Java

    数据结构树二叉树二叉搜索树AVL要做优先队列n元最小堆n元最大堆图表邻接矩阵有向图排序高效排序堆排序归并排序快速排序分布排序桶排序要做计数排序做基数排序问题动态规划*:使用记忆化和 DP 实现。 *位操作*:使用...

    java算法与数据结构

    (8)堆排序树 (9)B-树 4.图形结构 (1)图的定义及存储结构 (2)图的深度优先和广度优先遍历。 (3)无向图的连通性和最小生成树 (4)拓扑排序 (5)关键路径 (6)单源最短路径 5.散列表(哈希表) (1)散...

    Java数据结构和算法中文第二版(1)

    堆排序 小结 问题 实验 编程作业 第13章 图 图简介 搜索 最小生成树 有向图的拓扑排序 有向图的连通性 小结 问题 实验 编程作业 第14章 带权图 带权图的最小生成树 最短路径问题 每一对顶点...

    数据结构(Java版)(第2版)习题解答

    第0章 Java程序设计基础 1 【习0.1】 实验0.1 哥德巴赫猜想。 1 【习0.2】 实验0.2 杨辉三角形。 1 【习0.3】 实验0.3 金额的中文大写形式。 1 【习0.4】 实验0.4 下标和...【习9.3】 说明二叉排序树与堆的差别。 34

    欧拉公式求圆周率的matlab代码-Learn-Data_Structure-Algorithm-by-Java:Java实现的数据结构和算法

    堆排序 基数排序 图算法 图表示 广度优先搜索(BFS) 深度优先搜索(DFS) 拓扑排序 紧密连接的组件(SCC) 最小生成树(MST) 所有对最短路径(Floyd Warshall算法) 单源最短路径算法 Djkastra的算法 贝尔曼福特...

    Data-Structure:《数据结构与算法分析》上的代码实现

    - 二叉堆 - 左式堆 - 二项队列 ###第七章 - 插入排序 - 希尔排序 - 堆排序 - 归并排序 - 快速排序 ###第八章 -不相交集 ###第九章 -邻接表(Versioni 1,2) -拓扑排序(Versioni 1,2) -单源最短路径算法 -最大网络流 -...

    Java数据结构与算法视频教程

    视频详细讲解,需要的小... 二叉查找树;第四章: 堆; 优先队列; 2-3查找树; 红黑树;第五章: B-树; B+树; 并查集; 无向图;第六章: 有向图; 拓扑排序; 加权无向图; 最小生成树; 加权有向图; 最短路径;

Global site tag (gtag.js) - Google Analytics