堆排序 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} /* ...
随机推荐
- 04-【servlet转发和重定向】
转发: //forward(将 数据传给下一个资源(servlet,jsp ,html等 ,把请求和响应的数据和参数设置带过去 ) request.getRequestDispatcher(" ...
- ISO/IEC 15444-12 MP4 封装格式标准摘录 4
目录 Movie Fragments Movie Extends Box Movie Extends Header Box Track Extends Box Movie Fragment Box M ...
- opencv,用摄像头识别贴片元件的定位和元件的角度(转载)
经过半个月学习opencv有点小成果,用摄像头识别贴片元件的定位和元件的角度(转载) (2013-04-17 16:00:22) 转载▼ 分类: 学习笔记 先说一下开源的opencv真是一件伟大的 ...
- MYSQL获得查询记录的行号
对于获得查询记录的行号这一功能,Oracle 中可以使用标准方法(8i版本以上),也可以使用非标准的ROWNUM,MS SQL Server 则在 2005 版本中提供了ROW_NUMBER()函数. ...
- CNN for NLP
卷积神经网络在自然语言处理任务中的应用.参考链接:Understanding Convolutional Neural Networks for NLP(2015.11) Instead of ima ...
- es实战一:基本概念
基本概念 可以对照数关系型据库来理解Elasticsearch的有关概念. Relational DB Elasticsearch Databases Indices Tables Types Row ...
- 喜大普奔!.NET界面控件DevExpress v19.2发布,快来下载体验
DevExpress Universal Subscription(又名DevExpress宇宙版或DXperience Universal Suite)是全球使用广泛的.NET用户界面控件套包,De ...
- Create React App 安装less 报错
执行npm run eject 暴露模块 安装 npm i less less-loader -D 1.打开 react app 的 webpack.config.js const sassRege ...
- php类点滴---访问修饰符public protected private
public可以被继承,可以外部访问(也就是实例化对象可以直接访问) protected受保护的,可以被子类继承,无法外部访问 private继承,外部访问都别想 <?phpclass coac ...
- Acwing-204-表达整数的奇怪方式(扩展中国剩余定理)
链接: https://www.acwing.com/problem/content/206/ 题意: 给定2n个整数a1,a2,-,an和m1,m2,-,mn,求一个最小的非负整数x,满足∀i∈[1 ...