1. <pre name="code" class="java">package heapSort;
  2. /**
  3. * 大根堆
  4. * @author root
  5. *
  6. */
  7. public class HeapSort {
  8.  
  9. static int[] data = {0,9,4,6,2,5};
  10. static int[] data1 = {0,2,4,5,3,1,7,6};
  11.  
  12. public static void main(String[] args) {
  13. // TODO Auto-generated method stub
  14. sort(data1);
  15. print(data1);
  16. }
  17. //堆排序
  18. public static void sort(int[] data){
  19. int length = data.length-1;
  20. //建立大根堆,从最后一个孩子节点开始,依次向下调整
  21. for(int i=length/2; i>0; --i){
  22. heapAjdust1(data, i, length);
  23. }
  24. //排序(每次将堆顶放到后面,然后调整堆)
  25. for(int i=length; i>1; --i){
  26. int t = data[1];
  27. data[1] = data[i];
  28. data[i] = t;
  29. heapAjdust1(data, 1, i-1);
  30. }
  31. }
  32. //向下调整(课本上的)
  33. public static void heapAjdust(int[] data, int s, int m){
  34. int temp = data[s];
  35. for(int j=2*s; j<=m; j*=2){
  36. if((j+1)<=m && data[j]<data[j+1])
  37. j++;
  38. if(data[s]>=data[j])
  39. break;
  40. data[s] = data[j];
  41. s=j;
  42. }
  43. data[s] = temp;
  44. }
  45. /**
  46. * 向下调整(自己改写的),大于孩子节点则跳出,否则与较大孩子交换,继续向下调整
  47. * @param data
  48. * @param s 需要向下调整的节点序号
  49. * @param m 最后一个节点序号
  50. */
  51. public static void heapAjdust1(int[] data, int s, int m){
  52. for(int j=2*s; j<=m; j*=2){//从s的子节点开始,一直到最后一个节点
  53. //取较大节点
  54. if((j+1)<=m && data[j]<data[j+1])//有有右节点,并且左节点小于右节点
  55. j++;
  56. if(data[s]>=data[j])//s节点值大于较大节点,则s节点比其所有子孙都大,结束
  57. break;
  58. int t = data[s];//s小于孩子,将s与孩子交换
  59. data[s] = data[j];
  60. data[j] = t;
  61. s=j;//s转到孩子节点上,继续与孩子比较
  62. }
  63. }
  64.  
  65. public static void print(int[] data){
  66. for(int i=1; i<data.length; i++){
  67. System.out.println(data[i]);
  68. }
  69. }
  70. }
  1.  

堆排序 java的更多相关文章

  1. 堆排序 java实现

    import java.util.Arrays; /* * 思路: * 1.方法adjustDown:对于一个数组a[],针对第i个数进行向下(直到len-1)调整,使得该位置成为大顶堆 * 2.方法 ...

  2. 堆排序—Java

    堆排序: 一棵完全二叉树,如果父节点的值大于等于左右节点的值,则称此完全二叉树为小根堆(小顶堆):如果父节点的值小于等于左右节点的值,则次完全二叉树为大根堆(大顶堆). 堆排序是建立在大顶堆或小顶堆的 ...

  3. 堆排序(Java数组实现)

    堆排序:利用大根堆 数组全部入堆,再出堆从后向前插入回数组中,数组就从小到大有序了. public class MaxHeap<T extends Comparable<? super T ...

  4. 排序算法(三)堆排序及有界堆排序Java实现及分析

    1.堆排序基数排序适用于大小有界的东西,除了他之外,还有一种你可能遇到的其它专用排序算法:有界堆排序.如果你在处理非常大的数据集,你想要得到前 10 个或者前k个元素,其中k远小于n,它是很有用的. ...

  5. 堆排序——Java实现

    一.堆排序 堆排序(Heap Sort)是指利用堆这种数据结构所设计的一种排序算法.堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点. 二.堆 什 ...

  6. 堆排序Java实现

    package practice; import edu.princeton.cs.algs4.StdRandom; public class TestMain { public static voi ...

  7. 堆排序算法 java 实现

    堆排序算法 java 实现 白话经典算法系列之七 堆与堆排序 Java排序算法(三):堆排序 算法概念 堆排序(HeapSort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,可以利用数组的特 ...

  8. 20172302 《Java软件结构与数据结构》第八周学习总结

    2018年学习总结博客总目录:第一周 第二周 第三周 第四周 第五周 第六周 第七周 第八周 教材学习内容总结 第十二章 优先队列与堆 1.堆(heap)是具有两个附加属性的一棵二叉树: (1)它是一 ...

  9. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

随机推荐

  1. 04-【servlet转发和重定向】

    转发: //forward(将 数据传给下一个资源(servlet,jsp ,html等 ,把请求和响应的数据和参数设置带过去 ) request.getRequestDispatcher(" ...

  2. ISO/IEC 15444-12 MP4 封装格式标准摘录 4

    目录 Movie Fragments Movie Extends Box Movie Extends Header Box Track Extends Box Movie Fragment Box M ...

  3. opencv,用摄像头识别贴片元件的定位和元件的角度(转载)

    经过半个月学习opencv有点小成果,用摄像头识别贴片元件的定位和元件的角度(转载) (2013-04-17 16:00:22) 转载▼   分类: 学习笔记 先说一下开源的opencv真是一件伟大的 ...

  4. MYSQL获得查询记录的行号

    对于获得查询记录的行号这一功能,Oracle 中可以使用标准方法(8i版本以上),也可以使用非标准的ROWNUM,MS SQL Server 则在 2005 版本中提供了ROW_NUMBER()函数. ...

  5. CNN for NLP

    卷积神经网络在自然语言处理任务中的应用.参考链接:Understanding Convolutional Neural Networks for NLP(2015.11) Instead of ima ...

  6. es实战一:基本概念

    基本概念 可以对照数关系型据库来理解Elasticsearch的有关概念. Relational DB Elasticsearch Databases Indices Tables Types Row ...

  7. 喜大普奔!.NET界面控件DevExpress v19.2发布,快来下载体验

    DevExpress Universal Subscription(又名DevExpress宇宙版或DXperience Universal Suite)是全球使用广泛的.NET用户界面控件套包,De ...

  8. Create React App 安装less 报错

    执行npm run eject 暴露模块 安装 npm i  less less-loader -D 1.打开 react app 的 webpack.config.js const sassRege ...

  9. php类点滴---访问修饰符public protected private

    public可以被继承,可以外部访问(也就是实例化对象可以直接访问) protected受保护的,可以被子类继承,无法外部访问 private继承,外部访问都别想 <?phpclass coac ...

  10. Acwing-204-表达整数的奇怪方式(扩展中国剩余定理)

    链接: https://www.acwing.com/problem/content/206/ 题意: 给定2n个整数a1,a2,-,an和m1,m2,-,mn,求一个最小的非负整数x,满足∀i∈[1 ...