(一)选择排序之一:堆排序
选择排序学过的有三种:简单选择排序、树形选择排序、堆排序
今天先来简单的了解一下堆排序:
完全二叉树,即从头到尾,从左到右依次排序,符合大堆(小堆)都行,即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
(一)选择排序之一:堆排序相关推荐
- java中的排序算法——简单选择排序,树形选择排序与堆排序(一)
package com.sort; /** * 选择排序: * 简单选择排序,树形选择排序与堆排序 * */ public class SelecSortDemo { /** * ----- ...
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)...
不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...
- 数据结构之选择排序:堆排序
选择排序:堆排序 思维导图: 堆的概念: 堆的初始化: 堆排序的算法思想: 堆排序代码实现: 堆排序的插入: 堆排序的删除: 堆排序的性能: 思维导图: 堆的概念: 根>=左右孩子节点的顺序存储 ...
- 排序算法之选择排序(简单选择排序、堆排序)
选择排序(简单选择排序.堆排序) 选择排序 简单选择排序 概念 算法实现 堆排序 概念 算法实现 后续 选择排序 选择排序的基本思想是:每一趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列 ...
- 数据结构—排序算法总结(插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、合并排序、计数排序)
*排序 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 稳定性 在待排序的数组中,如果出现多个相同的关键字,例如:98751555512,中出现重复的数字,在 ...
- 10种排序算法比较(直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、折半插入排序、2路插入排序)
本文(所有排序算法代码+综合比较代码)链接:https://download.csdn.net/download/qq_39932172/11217572 一.比较目的: 由于<数据结构> ...
- 八大排序:冒泡排序、插入排序、希尔排序、选择排序、堆排序、归并排序、快速排序、基数排序
[前言] 所有代码段都以升序为例,数组下标从0开始.排序的稳定性即:任意两个相等的数据,排序前后的相对位置不发生变化. [冒泡排序(Bubble Sort)] 它重复地访问过要排序的元素序列,依次比较 ...
- 【算法拾遗(java描写叙述)】--- 选择排序(直接选择排序、堆排序)
选择排序的基本思想 每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,知道所有记录排序完毕.主要有两种选择排序方法:直接选择排序(或称简单选择排序)和堆排序. 直接选择排序 ...
- 两种选择排序算法:简单选择排序、堆排序
一.简单选择排序 空间复杂度:O(1) 时间复杂度:O(n^2) 稳定性:不稳定 适用性:顺序表.链表 //简单选择排序 void SelectSort(int A[],int n){for(i=0; ...
- 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)
转载:http://blog.csdn.net/pzhtpf/article/details/7559943 3.简单选择排序 (1)基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换 ...
最新文章
- 几个清华和哈工大学霸的公众号,值得学习!
- vant UI库组件, 与HTML 标签冲突
- OpenHarmony和HarmonyOS有什么区别?这篇文章讲清楚了
- oracle json入参调用ws服务返回请求失败_Spring 5.2.2技术集成 —Spring HTTP调用程序和JAXWS...
- codeforces 909C. Python Indentation
- apache hadoop_使用Apache Hadoop计算PageRanks
- Python脚本做接口测试,抛弃接口测试工具是否可行?(二)
- 洛谷 深基 第1部分 语言入门 第5章 数组与数据批量存储
- IP组播之组管理协议IGMP
- 昨晚直播后续,关于职场人的能力
- 华佳慧科技:OSN500设备ERPS相切环组网介绍
- 大数据战略对企业生存有多重要?
- 2021 iOS面试题大全---全方面剖析面试(一)
- sql根据身份证计算年龄
- 腾讯新闻 React 同构直出优化实践
- Imagination发布PowerVR软件开发套件和工具包重要更新版本,含光线追踪代码示例...
- excel表格打印每页都有表头_Excel打印表格不再手忙脚乱
- 教你三分钟上手阿里云OOS上传操作
- 龙之谷服务器仓库在哪个位置,全区全服版本更新至Ver.190
- latex 参考文献没有显示_LaTeX 参考文献的处理
热门文章
- Java常用设计模式————桥接模式
- docker 容器之间通信_四、Docker 网络原理、分类及容器互联配置
- java用户界面项目_结对项目(带图型用户界面)Java实现【柴政-陈起廷】
- C语言文件与数组之间输入输出操作
- (枚举)餐厅点餐(fzu2086)
- mysql离散查询_如何写出高性能的MySQL查询
- java 设计char类型_JAVA中的char类型
- Android实现自定义相册,在Android Gallery App中创建自定义相册
- ❤️六W字《计算机基础知识》(五)(建议收藏)❤️
- ltspice 双脉冲_焊烟脉冲布袋式除尘器制作