堆排序 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} /* ...
随机推荐
- c#类生成表
第一步: 创建MyContext类 public class MyContext:DbContext { public MyContext():base() { } public DbSet<U ...
- 分享一个百万数量级的测试学习用的mysql数据集
TEST_DB 带有集成测试套件的示例数据库,用于测试应用程序和数据库服务器 此存储库已从Launchpad迁移. 请参阅MySQL文档中的用法 它来自哪里 原始数据由西门子企业研究中心的Fushen ...
- 14、yum仓库搭建
一.本地仓库 1.yum搭建本地仓库(单台如何实现) 1) 挂载cd光盘,因为里面很多的软件包 [root@www.oldboyedu.com ~]# mount /dev/cdrom /mnt 2) ...
- struct:二进制数据结构的打包与解包
介绍 struct模块包括一些函数,这些函数可以完成字节串与原生Python数据类型(如数字和字符串)之间的转换 函数与Struct类 struct提供了一组处理结构值的模块级函数,另外还有一个Str ...
- C获取数组长度
c语言中,定义数组后可以用sizeof命令获得数组的长度(可容纳元素个数) 如: { int data[4]; int length; length=sizeof(data)/sizeof(data[ ...
- 2.LVS的三种工作模式_NAT模式
1.LVS的三种工作模式 1)VS/NAT模式(Network address translation) 2)VS/TUN模式(tunneling) 3)DR模式(Direct routing) 1. ...
- 文件浏览:ls&file
文件浏览主要完成的功能是列出当前目录或指定目录下文件的文件名称以及一些基本的资料. Linux的命令是区分大小写的. 1. ls:列出当前目录(默认)或指定目录下所有文件,并按字典序排序 语法:ls ...
- LNMP安装与配置之CentOS7的安装。
LNMP与LAMP是我们常见的两种网站服务器架构.LNMP代表的就是Linux系统下Nginx+MySQL+PHP/Python,LAMP代表的则是Linux系统下Apache+MySQL+PHP/P ...
- 使用 Eclipse 构建的时候会出现 run as 中没有 maven package 选项
注:该方法来自我学习时别人分享的出现问题的解决方法,并没有亲自测试,仅供参考 是因为建的是普通 java 工程,需要把它转换成 maven project. 1.右键工程--maven--Disabl ...
- Excutor线程池
文章:Java并发(基础知识)—— Executor框架及线程池 待完善……