- 浏览: 182789 次
- 性别:
- 来自: 自己输入城市...
文章分类
- 全部博客 (128)
- Java (13)
- Util (21)
- IO (1)
- Thread (4)
- Net (0)
- Design Patterns (0)
- Training (4)
- ----------------- (0)
- JS-1 (15)
- JS-3 (7)
- AJAX (3)
- AS (2)
- ------------------- (0)
- HTML (3)
- CSS (3)
- Art (15)
- -------------------- (0)
- RegExp (4)
- --------------------- (0)
- SQL (6)
- Servlet $ JSP (2)
- JDBC (2)
- ---------------------- (0)
- Bird (3)
- Setting (7)
- DL (4)
- PHP (4)
最新评论
-
durong11:
或者直接在函数的中加入:if(head.data.equals ...
我的Java单链表练习 -
durong11:
一种解释是:如果是从头结点insert 直接使用addFrom ...
我的Java单链表练习 -
老肥猴_vi:
谢谢。但是貌似insert函数( public boolean ...
我的Java单链表练习 -
niepeng880208:
支持
List转换成String数组 -
haohao-xuexi02:
EventHelp
幻灯片效果
Comparator接口
package MyInterface; public interface Comparator<T> { int compare(T x, T y); }
package Heap; import MyInterface.Comparator; public class Greater<T> implements Comparator<T> { public int compare(T x, T y) { return -((Comparable<T>)x).compareTo(y); } }
package Heap; import MyInterface.Comparator; public class Less<T> implements Comparator<T> { public int compare(T x, T y) { return ((Comparable<T>)x).compareTo(y); } }
package Heap; import MyInterface.Comparator; public class Heaps { /** * 建堆 */ public static <T> void pushHeap(T[] arr, int last, T item, Comparator<? super T> comp) { int currPos, parentPos; currPos = last; parentPos = (currPos - 1) / 2; while (currPos != 0) { if (comp.compare(item, arr[parentPos]) < 0) { arr[currPos] = arr[parentPos]; currPos = parentPos; parentPos = (currPos - 1) / 2; } else break; } arr[currPos] = item; } /** * 删除操作 */ public static <T> T popHeap(T[] arr, int last, Comparator<? super T> comp) { T tmp = arr[0]; arr[0] = arr[last - 1]; arr[last - 1] = tmp; adjustHeap(arr, 0, last - 1, comp); return tmp; } /** * 调整堆 */ private static<T> void adjustHeap(T[] arr, int first, int last, Comparator<? super T> comp) { int currPos, childPos; T target; currPos = first; target = arr[first]; childPos = 2 * currPos + 1; while(childPos < last) { //首先比较左右孩子大小,取大值 if((childPos + 1 < last) && comp.compare(arr[childPos + 1], arr[childPos]) < 0) childPos = childPos + 1; //再比较目标值 if(comp.compare(arr[childPos], target) < 0) { arr[currPos] = arr[childPos]; currPos = childPos; childPos = 2 * currPos + 1; }else break; } arr[currPos] = target; } /** * 堆的产生 * 从位于索引(n-2)/2处的最后一个父结点开始,到位于索引0处的根结点结束,向上 * 过滤树中的每个父结点,就可以将n元素数组转换成堆. */ public static <T> void makeHeap(T[] arr, Comparator<? super T> comp) { int heapPos, lastPos; lastPos = arr.length; heapPos = (lastPos - 2) / 2; //heapPos = ((lastPos - 1) - 1) / 2; while(heapPos >= 0) { adjustHeap(arr, heapPos, lastPos, comp); heapPos--; } } /** * 堆排序 * 最大堆以升序对数组进行排序,最小堆以降序. */ public static <T> void heapSort(T[] arr, Comparator<? super T> comp) { Heaps.makeHeap(arr, comp); int len = arr.length; for(int i = len; i > 1; i--) { Heaps.popHeap(arr, i, comp); } } }
package Heap; import MyInterface.Comparator; public class TestHeap { public static void main(String[] args) { Integer[] arr = {15, 29, 52, 17, 21, 39, 8}, arrA = new Integer[arr.length], arrB = new Integer[arr.length]; Greater<Integer> greater = new Greater<Integer>(); Less<Integer> less = new Less<Integer>(); for(int i = 0; i < arr.length; i++) { Heaps.pushHeap(arrA, i, arr[i], greater); Heaps.pushHeap(arrB, i, arr[i], less); } //打印最大堆 for(int i = 0; i < arrA.length; i++) System.out.print(arrA[i] + " "); // 52 21 39 15 17 29 8 System.out.println(); //打印最小堆 for(int i = 0; i < arrB.length; i++) System.out.print(arrB[i] + " "); // 8 17 15 29 21 52 39 Integer maxValue = Heaps.popHeap(arrA, arrA.length, greater); Integer minValue = Heaps.popHeap(arrB, arrB.length, less); System.out.println('\n' + "max value is: " + maxValue); // max value is: 52 System.out.println("min value is: " + minValue); // min value is: 8 // 测试堆排序 Heaps.heapSort(arrA, greater); Heaps.heapSort(arrB, less); for (int i = 0; i < arrA.length; i++) { System.out.print(arrA[i] + " "); // 8 15 17 21 29 39 52 } System.out.println(); for (int i = 0; i < arrB.length; i++) { System.out.print(arrB[i] + " "); // 52 39 29 21 17 15 8 } } }
发表评论
-
优先队列的实现
2008-05-11 05:00 938package Heap; import MyInter ... -
HashSet 类的实现
2008-04-28 16:03 1164package Hash; import MyInter ... -
HashMap类的实现
2008-04-28 12:20 1508package Hash; import java.ut ... -
Hash类的实现
2008-04-27 15:10 792package Hash; import java.util ... -
散列表的设计-->线性探查法
2008-04-24 09:07 1892性能分析: 散列表中条目数的比例较小时,使用线性探查法的效率较 ... -
二叉排序树的TreeMap类设计
2008-04-23 23:29 1917Iterable接口 package MyInterface; ... -
java集合操作
2008-04-23 23:26 2993package Sets; import java.util ... -
二叉排序树的实现
2008-04-20 01:46 1641最适合用STree排序的是不可变类,不可变类的主要特征是它的对 ... -
InorderIterator类的实现
2008-04-07 08:41 931接口的定义: public interface MyItera ... -
BinaryTree遍历练习::表达式树
2008-04-05 14:35 1757package ExpressionTree; import ... -
二叉树遍历
2008-03-31 01:48 1057二叉树的高度 图(1) /**用后根遍历求二叉树的高度*/ ... -
有界队列
2008-03-26 00:14 973package Queue; import java.uti ... -
Stack练习:: 中缀-后缀表达式
2008-03-21 17:18 1745package Stack.Calculate; imp ... -
链式队列的实现
2008-03-21 17:05 1313package Queue; import java.u ... -
Stack练习:: 十进制正整数转化成二进制
2008-03-17 16:09 1243include "stdio.h" in ... -
顺序栈的实现
2008-03-14 00:16 1054package Stack; /** * 顺序栈的实现 ... -
数据结构 Java循环双向链表
2008-03-08 17:33 3109■ 构造函数 每个构造函数都通过 this 来初始化链接域 p ... -
我的Java单链表练习
2008-03-06 19:14 2997package LinkedList; /** * ... -
我的ArrayList实现
2008-03-04 21:26 1346package ArrayList; /** * < ... -
[转]数据结构 用Java实现单链表
2007-11-28 12:56 17172007-08-24 页面自动刷 ...
相关推荐
数组进行堆操作,包括堆的排序、堆的插入、堆的删除、堆增加值等
villoc-堆操作的可视化
该代码支持对堆的各种操作,主要面对学习数据结构的初学者
PHP对于二叉堆的操作,以及个人的理解,可进行插入、删除操作等
内容概要:堆的常用操作,包括创建、销毁、添加、插入、删除、空堆、满堆、堆顶 阅读建议:推荐有一定的数据结构基础,对于c语言敏感性高,对指针学习感兴趣
编写一个Heap类,实现数据结构中的最大堆,包含最大堆基本操作的源代码,紧供参考。
皮洛克用于可视化堆操作的 pin 工具。构建和运行构建运行: make PIN_ROOT= ~ /code/pin-2.14-71313-gcc.4.4.7-linux 其中 PIN_ROOT 是您的 pin 目录的路径。 然后运行: sudo ~ /code/pin-2.14-71313-gcc.4.4.7-...
win10背景改变为豆沙绿的工具....
ppt制作的堆排序过程,每一步都演示的很详细,可帮助大家理解堆的定义,理清思路,有需要的就下载吧。
合成分离逻辑 从分离逻辑规范中合成堆操作程序工具背后的理论可以在找到“合成分离逻辑”的详细信息。用法尝试示例的最简单方法是通过。 否则,请查看下面的建筑说明。设置和构建要求 , sbt (版本> = 1.1.6) ...
定义堆,封装初始化、插入、删除堆顶元素的操作
数据结构——堆 1.容易蒙圈的概念问题 ⼀般我在学习⼀个新的东西的时候都会在脑⼦⾥有⼀⼤堆问题!...实现堆的⼀⼤堆操作来袭 实现堆先要建⼀个堆类 定义它的属性和⽅法 我这⾥定义了如下的⽅法(基本
易语言源码易语言操作堆内存源码.rar 易语言源码易语言操作堆内存源码.rar 易语言源码易语言操作堆内存源码.rar 易语言源码易语言操作堆内存源码.rar 易语言源码易语言操作堆内存源码.rar 易语言源码易语言操作...
数据结构中关于堆串的一系列操作 创建 删除 插入 清空 判空等等 仅供参考
本程序用C++实现,并通过模板使得本程序有很好的通用性,对于学习堆操作的算法很有帮助!
西门子IONPURE MX小流量CEDI(连续电去离子)膜堆pdf,西门子IONPURE MX小流量CEDI(连续电去离子)膜堆
堆和栈的区别,看完后可以透彻理解堆和栈在操作系统中的区别,非常有用
西门子IONPURE VNX50-EX大流量CEDI膜堆pdf,西门子IONPURE VNX50-EX大流量CEDI(连续电去离子)膜堆
数据结构最大堆的实现,通过改编最小堆的模板,实现最大堆操作。
堆的构造,插入以及删除操作。由C++编写,可根据使用者需要输入数据