java语言实现堆排序
package secondChapter;
import java.util.Random;
public class HeapSort {
private static int AHeapSize;
public static void main(String[] args) {
HeapSort hs = new HeapSort();
int[] A = new int[10];
//产生随机数组
for(int i=0;i<A.length;i++){
A[i] = hs.generateRandomInt(50);
}
System.out.print("Original array:");
for (int i = 0; i < A.length; i++) {
System.out.print(A[i]+" ");
}
System.out.println();
hs.heap_sort(A);
System.out.print("Sorted array: ");
for (int i = 0; i < A.length; i++) {
System.out.print(A[i]+" ");
}
}
//HEAPSORT过程
public void heap_sort(int[] A) {
AHeapSize = A.length;
build_max_heap(A);
System.out.print("build_max_heap: ");
for (int i = 0; i < A.length; i++) {
System.out.print(A[i]+" ");
}
System.out.println();
for(int i=A.length;i>1;i--){
int temp = A[0];
A[0] = A[i-1];
A[i-1] = temp;
AHeapSize -= 1;
max_heapify(A,1);
}
}
//HUILD-MAX-HEAP过程
public void build_max_heap(int[] A) {
for(int i=A.length/2;i>0;i--){
max_heapify(A,i);
}
}
//MAX-HEAPIFY过程
public void max_heapify(int[] A, int i) { //i为 元素下标+1
int l = 2*i;
int r = 2*i+1;
int largest;
if(l<=AHeapSize && A[l-1]>A[i-1]){
largest = l;
}else{
largest = i;
}
if(r<=AHeapSize && A[r-1]>A[largest-1]){
largest = r;
}
if(largest!=i){
int temp = A[i-1];
A[i-1] = A[largest-1];
A[largest-1] = temp;
max_heapify(A, largest);
}
}
private Random rd = new Random();
public int generateRandomInt(int bound) {
return rd.nextInt(bound);
}
}
输出结果:
Original array:40 44 11 43 25 0 7 14 34 14
build_max_heap: 44 43 11 40 25 0 7 14 34 14
Sorted array: 0 7 11 14 14 25 34 40 43 44
java语言实现堆排序的更多相关文章
- 我们一起来排序——使用Java语言优雅地实现常用排序算法
破阵子·春景 燕子来时新社,梨花落后清明. 池上碧苔三四点,叶底黄鹂一两声.日长飞絮轻. 巧笑同桌伙伴,上学径里逢迎. 疑怪昨宵春梦好,元是今朝Offer拿.笑从双脸生. 排序算法--最基础的算法,互 ...
- 读书笔记:《数据结构与算法分析Java语言描述》
目录 第 3 章 表.栈和队列 3.2 表 ADT 3.2.1 表的简单数组实现 3.2.2 简单链表 3.3 Java Collections API 中的表 3.3.1 Collection 接口 ...
- 深度实战玩转算法, Java语言7个经典应用诠释算法精髓
深度实战玩转算法,以Java语言主讲,通过7款经典好玩游戏,真正将算法用于实际开发,由算法大牛ACM亚洲区奖牌获得者liuyubobobo主讲,看得见的算法,带领你进入一个不一样的算法世界,本套课程共 ...
- JAVA语言中的修饰符
JAVA语言中的修饰符 -----------------------------------------------01--------------------------------------- ...
- Atitit onvif协议获取rtsp地址播放java语言 attilx总结
Atitit onvif协议获取rtsp地址播放java语言 attilx总结 1.1. 获取rtsp地址的算法与流程1 1.2. Onvif摄像头的发现,ws的发现机制,使用xcf类库1 2. 调用 ...
- AVL树原理及实现(C语言实现以及Java语言实现)
欢迎探讨,如有错误敬请指正 如需转载,请注明出处http://www.cnblogs.com/nullzx/ 1. AVL定义 AVL树是一种改进版的搜索二叉树.对于一般的搜索二叉树而言,如果数据恰好 ...
- Java语言中的面向对象特性总结
Java语言中的面向对象特性 (总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知 ...
- JAVA语言搭建白盒静态代码、黑盒网站插件式自动化安全审计平台
近期打算做一个插件化的白盒静态代码安全审计自动化平台和黑盒网站安全审计自动化平台.现在开源或半开源做黑盒网站安全扫描的平台,大多是基于python脚本,安全人员贡献python脚本插件增强平台功能.对 ...
- 关于Java语言和面向对象记录
本科时常用的c语言是面向过程的语言,而Java是面向对象的语言 Java语言的11个关键术语 简单性.可移植性.面向对象.分布式.高性能.解释型.健壮性.多线程.安全性.动态性.体系结构中立 面向对象 ...
随机推荐
- java日期操作大全
摘自(http://www.blogjava.net/i369/articles/83483.html) java日期操作 大全 先来一个: 取得指定月份的第一天与取得指定月份的最后一天 http ...
- 读javascript高级程序设计10-DOM
一.节点关系 元素的childNodes属性来表示其所有子节点,它是一个NodeList对象,会随着DOM结构的变化动态变化. hasChildNodes():是否有子节点. var headline ...
- oracle with as
http://blog.csdn.net/a9529lty/article/details/4923957/
- numtoyminterval函数——数字转换函数
numtoyminterval函数——数字转换函数 ----转至51CTO 水滴的博客 语法:NUMTOYMINTERVAL ( n , 'char_expr' ) c ...
- Thrift编译与验证 - python
1 编译(保留了C和python语言,简化编译): # ./configure --without-java --without-cpp --without-php --without-erlang ...
- juqery easyui
私人做程序开发一直有个头疼的问题就是后台管理界面,以前一般都是自己用jquery+ps自己设计的,效果很一般,很不理想. 今天初次使用Jquery EasyUi,简单的做了个布局页面感觉还不错,给大家 ...
- ASP.NET Web API 入门示例详解
REST服务已经成为最新的服务端开发趋势,ASP.NET Web API即为.NET平台的一种轻量级REST架构. ASP.NET Web API直接借鉴了ASP.NET MVC的设计,两者具有非常类 ...
- 使用xca生成SSL证书
先下载安装xca工具,地址是http://xca.hohnstaedt.de/ 先用xca创建一本ca证书 xca打开的界面 依次File, New DataBase,选择xdb文件保存路径,再输入密 ...
- ESXi虚拟磁盘共享
因为项目需要需要一个磁盘共享的环境. 最先想到用iSCSI,两个客户端挂载同一个远端盘:这样确实可行,但是感觉太繁琐,想到既然是虚拟机环境,可以设置虚拟磁盘共享. 于是网上一番搜罗,确实有人这个做过, ...
- laravel_5《数据库迁移》
Laravel鼓励敏捷.迭代的开发方式,我们没指望在第一次就获得所有正确的.相反,我们编写代码.测试和与我们的最终用户进行交互,并完善我们的理解. 对于工作,我们需要一个配套的实践集.我们使用像sub ...