选择排序学过的有三种:简单选择排序、树形选择排序、堆排序

今天先来简单的了解一下堆排序:

  完全二叉树,即从头到尾,从左到右依次排序,符合大堆(小堆)都行,即ki>=k2i && ki >= k2i+1
   由于此处使用的是数组,则最长为array.length-1,并且 ki>=k2i+1 && ki >= k2i+2

下面的例子是百度上搜的,便于理解

实例如下:

public class MyHeap {public static void main(String[] args) {int[] array = {49,38,65,97,76,13,27,49 };print(array);HeapSort(array);print(array);}public static int[] HeapSort(int[] array){int n = (array.length-1)/2;for (int i = n; i >= 0; i--) {MaxHeap(array,i);}return array;}/**判断一个元素与其i*2+1(2)的关系*/public static int[] MaxHeap(int[] array,Integer i){int large = i;int index = 2*i+1;if(index< array.length && array[i]>array[index]){large = index;}index = 2*i +2;if(index< array.length && array[i]>array[index]){if( array[large]>array[index] ){large = index;}}if(large != i){int temp =array[i];array[i] = array[large];array[large] = temp;print(array);//每次交换顺序有打印if(large <= array.length/2){MaxHeap(array,large);//交换后,如果大的一层有下层,则再次判断大的一层是否符合}}return array;}/**打印数组*/public static void print(int[] array){for (int i = 0; i < array.length; i++) {System.out.print(array[i] + " ");}System.out.println();}
}

  

转载于:https://www.cnblogs.com/blogofcookie/p/5845586.html

(一)选择排序之一:堆排序相关推荐

  1. java中的排序算法——简单选择排序,树形选择排序与堆排序(一)

    package com.sort; /**  * 选择排序:  * 简单选择排序,树形选择排序与堆排序  *   */ public class SelecSortDemo { /** * ----- ...

  2. 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)...

    不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...

  3. 数据结构之选择排序:堆排序

    选择排序:堆排序 思维导图: 堆的概念: 堆的初始化: 堆排序的算法思想: 堆排序代码实现: 堆排序的插入: 堆排序的删除: 堆排序的性能: 思维导图: 堆的概念: 根>=左右孩子节点的顺序存储 ...

  4. 排序算法之选择排序(简单选择排序、堆排序)

    选择排序(简单选择排序.堆排序) 选择排序 简单选择排序 概念 算法实现 堆排序 概念 算法实现 后续 选择排序 选择排序的基本思想是:每一趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列 ...

  5. 数据结构—排序算法总结(插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、合并排序、计数排序)

    *排序 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 稳定性 在待排序的数组中,如果出现多个相同的关键字,例如:98751555512,中出现重复的数字,在 ...

  6. 10种排序算法比较(直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、折半插入排序、2路插入排序)

    本文(所有排序算法代码+综合比较代码)链接:https://download.csdn.net/download/qq_39932172/11217572 一.比较目的: 由于<数据结构> ...

  7. 八大排序:冒泡排序、插入排序、希尔排序、选择排序、堆排序、归并排序、快速排序、基数排序

    [前言] 所有代码段都以升序为例,数组下标从0开始.排序的稳定性即:任意两个相等的数据,排序前后的相对位置不发生变化. [冒泡排序(Bubble Sort)] 它重复地访问过要排序的元素序列,依次比较 ...

  8. 【算法拾遗(java描写叙述)】--- 选择排序(直接选择排序、堆排序)

    选择排序的基本思想 每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,知道所有记录排序完毕.主要有两种选择排序方法:直接选择排序(或称简单选择排序)和堆排序. 直接选择排序 ...

  9. 两种选择排序算法:简单选择排序、堆排序

    一.简单选择排序 空间复杂度:O(1) 时间复杂度:O(n^2) 稳定性:不稳定 适用性:顺序表.链表 //简单选择排序 void SelectSort(int A[],int n){for(i=0; ...

  10. 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)

    转载:http://blog.csdn.net/pzhtpf/article/details/7559943 3.简单选择排序 (1)基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换 ...

最新文章

  1. 几个清华和哈工大学霸的公众号,值得学习!
  2. vant UI库组件, 与HTML 标签冲突
  3. OpenHarmony和HarmonyOS有什么区别?这篇文章讲清楚了
  4. oracle json入参调用ws服务返回请求失败_Spring 5.2.2技术集成 —Spring HTTP调用程序和JAXWS...
  5. codeforces 909C. Python Indentation
  6. apache hadoop_使用Apache Hadoop计算PageRanks
  7. Python脚本做接口测试,抛弃接口测试工具是否可行?(二)
  8. 洛谷 深基 第1部分 语言入门 第5章 数组与数据批量存储
  9. IP组播之组管理协议IGMP
  10. 昨晚直播后续,关于职场人的能力
  11. 华佳慧科技:OSN500设备ERPS相切环组网介绍
  12. 大数据战略对企业生存有多重要?
  13. 2021 iOS面试题大全---全方面剖析面试(一)
  14. sql根据身份证计算年龄
  15. 腾讯新闻 React 同构直出优化实践
  16. Imagination发布PowerVR软件开发套件和工具包重要更新版本,含光线追踪代码示例...
  17. excel表格打印每页都有表头_Excel打印表格不再手忙脚乱
  18. 教你三分钟上手阿里云OOS上传操作
  19. 龙之谷服务器仓库在哪个位置,全区全服版本更新至Ver.190
  20. latex 参考文献没有显示_LaTeX 参考文献的处理

热门文章

  1. Java常用设计模式————桥接模式
  2. docker 容器之间通信_四、Docker 网络原理、分类及容器互联配置
  3. java用户界面项目_结对项目(带图型用户界面)Java实现【柴政-陈起廷】
  4. C语言文件与数组之间输入输出操作
  5. (枚举)餐厅点餐(fzu2086)
  6. mysql离散查询_如何写出高性能的MySQL查询
  7. java 设计char类型_JAVA中的char类型
  8. Android实现自定义相册,在Android Gallery App中创建自定义相册
  9. ❤️六W字《计算机基础知识》(五)(建议收藏)❤️
  10. ltspice 双脉冲_焊烟脉冲布袋式除尘器制作