堆排序 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} /* ...
随机推荐
- linux重装docker-compose后无法执行docker-compose命令
背景 使用自动化脚本重装docker和docker-compose(但脚本中未对旧版本的docker-compose进行任何处理,比如卸载删除) 导致执行docker-compose命令时报了错,大多 ...
- Linux命令详解——vmstat
Vmstat命令详解 一.前言 vmstat命令: 用来获得有关进程.虚存.页面交换空间及 CPU活动的信息.这些信息反映了系统的负载情况 二.虚拟内存运行原理 在系统中运行的每个进程都需要使用到内 ...
- -bash: ls: No such file or directory 错误的原因及解决办法
ubuntu出现如下错误: { Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.15.0-42-generic x86_64) * Documentation: ...
- 使用browsercookie来管理浏览器cookies
处理cookie是很繁琐的一件事情,稍微有一点处理不对的话,就不能访问网站,最好的办法就是能操作浏览器cookie,这样是最真实的,在Python中有一个第三方库: browsercookie就是来解 ...
- linux 命令技巧(转)--history
本文介绍一些关于bash的能够提高效率的技巧,主要是关于历史命令操作和一些快捷键,让你在命令行下工作效率翻倍. 1.history-----最基本的查看历史命令 2.!n-----编号为n的历史命令 ...
- QTP(8)
一.Action 1.调用Action C:\Program Files\HP\QuickTest Professional\CodeSamplesPlus\Flight_Samples (1)调用A ...
- sql 183. 从不订购的客户
SQL架构 某网站包含两个表,Customers 表和 Orders 表.编写一个 SQL 查询,找出所有从不订购任何东西的客户. Customers 表: +----+-------+ | Id | ...
- 报表开发神器!DevExpress Reporting v19.1:WinForms平台新功能
行业领先的.NET界面控件DevExpress Reporting全新发布了v19.1版本,本文主要为大家介绍WinForms.ASP.Net Core平台.Visual Studio报表设计器中发布 ...
- pandas聚合和分组运算之groupby
pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片.切块.摘要等操作.根据一个或多个键(可以是函数.数组或DataFrame列名)拆分pandas对象.计算分 ...
- redis实现排行榜功能
目录 加入排行榜 操作排行榜 redis的zset可以很方便地用来实现排行榜功能,下面简单介绍python如何使用redis实现排行榜功能 加入排行榜 获取redis实例 import redis m ...