堆排序 java
<pre name="code" class="java">package heapSort;
/**
* 大根堆
* @author root
*
*/
public class HeapSort { static int[] data = {0,9,4,6,2,5};
static int[] data1 = {0,2,4,5,3,1,7,6}; public static void main(String[] args) {
// TODO Auto-generated method stub
sort(data1);
print(data1);
}
//堆排序
public static void sort(int[] data){
int length = data.length-1;
//建立大根堆,从最后一个孩子节点开始,依次向下调整
for(int i=length/2; i>0; --i){
heapAjdust1(data, i, length);
}
//排序(每次将堆顶放到后面,然后调整堆)
for(int i=length; i>1; --i){
int t = data[1];
data[1] = data[i];
data[i] = t;
heapAjdust1(data, 1, i-1);
}
}
//向下调整(课本上的)
public static void heapAjdust(int[] data, int s, int m){
int temp = data[s];
for(int j=2*s; j<=m; j*=2){
if((j+1)<=m && data[j]<data[j+1])
j++;
if(data[s]>=data[j])
break;
data[s] = data[j];
s=j;
}
data[s] = temp;
}
/**
* 向下调整(自己改写的),大于孩子节点则跳出,否则与较大孩子交换,继续向下调整
* @param data
* @param s 需要向下调整的节点序号
* @param m 最后一个节点序号
*/
public static void heapAjdust1(int[] data, int s, int m){
for(int j=2*s; j<=m; j*=2){//从s的子节点开始,一直到最后一个节点
//取较大节点
if((j+1)<=m && data[j]<data[j+1])//有有右节点,并且左节点小于右节点
j++;
if(data[s]>=data[j])//s节点值大于较大节点,则s节点比其所有子孙都大,结束
break;
int t = data[s];//s小于孩子,将s与孩子交换
data[s] = data[j];
data[j] = t;
s=j;//s转到孩子节点上,继续与孩子比较
}
} public static void print(int[] data){
for(int i=1; i<data.length; i++){
System.out.println(data[i]);
}
}
}
堆排序 java的更多相关文章
- 堆排序 java实现
import java.util.Arrays; /* * 思路: * 1.方法adjustDown:对于一个数组a[],针对第i个数进行向下(直到len-1)调整,使得该位置成为大顶堆 * 2.方法 ...
- 堆排序—Java
堆排序: 一棵完全二叉树,如果父节点的值大于等于左右节点的值,则称此完全二叉树为小根堆(小顶堆):如果父节点的值小于等于左右节点的值,则次完全二叉树为大根堆(大顶堆). 堆排序是建立在大顶堆或小顶堆的 ...
- 堆排序(Java数组实现)
堆排序:利用大根堆 数组全部入堆,再出堆从后向前插入回数组中,数组就从小到大有序了. public class MaxHeap<T extends Comparable<? super T ...
- 排序算法(三)堆排序及有界堆排序Java实现及分析
1.堆排序基数排序适用于大小有界的东西,除了他之外,还有一种你可能遇到的其它专用排序算法:有界堆排序.如果你在处理非常大的数据集,你想要得到前 10 个或者前k个元素,其中k远小于n,它是很有用的. ...
- 堆排序——Java实现
一.堆排序 堆排序(Heap Sort)是指利用堆这种数据结构所设计的一种排序算法.堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点. 二.堆 什 ...
- 堆排序Java实现
package practice; import edu.princeton.cs.algs4.StdRandom; public class TestMain { public static voi ...
- 堆排序算法 java 实现
堆排序算法 java 实现 白话经典算法系列之七 堆与堆排序 Java排序算法(三):堆排序 算法概念 堆排序(HeapSort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,可以利用数组的特 ...
- 20172302 《Java软件结构与数据结构》第八周学习总结
2018年学习总结博客总目录:第一周 第二周 第三周 第四周 第五周 第六周 第七周 第八周 教材学习内容总结 第十二章 优先队列与堆 1.堆(heap)是具有两个附加属性的一棵二叉树: (1)它是一 ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
随机推荐
- Python之if-else语句
if--else语句if username == 'admin' and password == '123456': print('身份验证成功!') else: print('身份验证失败!')if ...
- Nginx自动加载配置文件方案
nginx自动加载配置文件方案一.nginx+consul+consul-template实现过程:consul作为服务发现软件,consul-template作为nginx配置文件的模板,consu ...
- linux网络协议栈(四)链路层 vlan处理
转:http://blog.csdn.net/u010246947/article/details/18224517 4.6.VLAN处理: 4.6.1.vlan原理 对于带vlan的以太网报文,其以 ...
- NORDIC GATT事件
假设有两个服务,每个服务注册相应事件 注册的事件为ble_dev_cfg_on_ble_evt.ble_lora_cfg_on_ble_evt 当在任何一个服务中发生GATT特征读或写的时候,注册的这 ...
- 基于UDS的BootLoader
bootloader程序架构略有简化的bootloader图 这张图和恒润教程中的BootLoader流程大体是一致的. 疑问点 Q:图中的烧写顺序是34-36-34-36-34-36-37,但另一些 ...
- altium designer 鼠线
第一: 按“L”进入View Configurations 要确保Default Color for New Nets是勾上的. 第二: 如果“PCB”的下拉列表处于“From-To Editor”状 ...
- Redis05——Redis高级运用(管道连接,发布订阅,布隆过滤器)
Redis高级运用 一.管道连接redis(一次发送多个命令,节省往返时间) 1.安装nc yum install nc -y 2.通过nc连接redis nc localhost 6379 3.通过 ...
- zencart批量插入TEXT文本属性attributes
有时候上传的产品与多级分类比较多,在后台添加文本属性如Name,Number等需要顾客自定义的内容就比较费神了.现在只需将以下代码保存为insert_attributes.php,变量$options ...
- 怎么卸载hexo
npm uninstall hexo -g 卸载失败 npm uninstall hexo-cli -g 推荐这个,成功卸载
- wind本地MySQL数据到hive的指定路径,Could not create file
一:使用:kettle:wind本地MySQL数据到hive的指定路径二:问题:没有root写权限网上说的什么少jar包,我这里不存在这种情况,因为我自己是导入jar包的:mysql-connecto ...