十大算法之堆排序:堆的定义例如以下:

n个元素的序列{k0,k1,...,ki,…,k(n-1)}当且仅当满足下关系时,称之为堆。

" ki<=k2i,ki<=k2i+1;或ki>=k2i,ki>=k2i+1.(i=1,2,…,[n/2])"

若将和此次序列相应的一维数组(即以一维数组作此序列的存储结构)看成是一个全然二叉树,

则全然二叉树中每个节点的值的都大于或等于随意一个字节的值(假设有的话)。称之为大顶堆。

则全然二叉树中每个节点的值的都小于或等于随意一个字节的值(假设有的话),称之为小顶堆。

由此,若序列{k0,k1,…,k(n-1)}是堆。则堆顶元素(或全然二叉树的根)必为序列中n个元素的最小值(或最大值)。

倘若给堆中每个节点都赋予一个整数值标签,根节点被标记为0。对于每个标记为i的节点,其左子节点(若存在的话)被标记为2*i+1,其右子节点(若存在的话)被标记为2*i+2,对于一个标记为i的非根节点,其父节点被标记为(i-1)/2。使用这个标记,我们可以将堆存储在数组中。节点存储在数据中的位置就使其标签。

package sort;

import java.util.Arrays;

/*

* 堆排序

* 堆的定义:满足 Ki <= K2i+1 Ki<=K2i+2 为小顶堆,满足 Ki >= K2i+1 Ki>=K2i+2 为大顶堆

* 此为大顶堆的代码实例,小顶堆相似

*/

public class duiSort {

static int[] arr = {

16,7,3,20,17,8 //定义待排序数组

};

public static void main(String[] args) {

buildHeap();//建立大顶堆并排序

System.out.println("排序好的为:" + Arrays.toString(arr));

}

private static void buildHeap() {

// TODO Auto-generated method stub

int len = arr.length;

for(int i =len/2 -1 ;i>=0;i--) //建立大顶堆

{

sortHeap(i,len);

}

System.out.println("建立好的大顶堆例如以下:" + Arrays.toString(arr));

for(int j = len-1; j >0; j --) //对大顶堆进行排序

{

swap(0,j);

sortHeap(0,j);

}

}

private static void sortHeap(int i, int len) {

// TODO Auto-generated method stub

int left = 2*i+1; //定义左节点

int right = 2*i +2; //定义右节点

int large = 0; //存放三个节点中最大节点的下标

if(len >left && arr[left] > arr[i]) //假设左孩子大于根节点 将左孩子下标赋值给large

large = left;

else //否之。将根节点下标赋值给large

large = i;

if(len > right && arr[right] > arr[large])

large = right; //若右孩子节点大于根节点,把右孩子节点下标赋值给large

if(large != i) //若最大节点的下标不等于根节点的下标时,交换其值

{

swap(large,i);

sortHeap(large,len);

}

}

//交换相应下标值

private static void swap(int m, int n) {

// TODO Auto-generated method stub

int temp ;

temp = arr[m];

arr[m] = arr[n];

arr[n] = temp;

}

}

大顶堆小顶堆java_《排序算法》——堆排序(大顶堆,小顶堆,Java)相关推荐

  1. 小白带你学---排序算法1

    微信公众号:小白算法 关注可了解更多算法,并能领取免费资料.问题或建议,请公众号留言; 小白算法,简单白话算法,每个人都能看懂的算法 序言 排序,顾名思义就是排列使得有序呗!!!通常意义上,我们所说的 ...

  2. 经典排序算法 - 堆排序Heap sort

    经典排序算法 - 堆排序Heap sort 堆排序有点小复杂,分成三块 第一块,什么是堆,什么是最大堆 第二块,怎么将堆调整为最大堆,这部分是重点 第三块,堆排序介绍 第一块,什么是堆,什么是最大堆 ...

  3. c 语言从大到小排序算法,10 大经典排序算法(动图演示+ C 语言代码)

    原标题:10 大经典排序算法(动图演示+ C 语言代码) 来源:C语言与CPP编程 以前也零零碎碎发过一些排序算法,但排版都不太好,又重新整理一次,排序算法是数据结构的重要部分,系统地学习很有必要. ...

  4. 排序算法——十大排序算法的图示与实现

    十大排序算法概览 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于 ...

  5. 十大经典排序算法----堆排序(超详细)

    目录 1. 堆排序的基础知识 1.1 大顶堆&&小顶堆 1.2 向下调整算法 1.3 物理结构与逻辑结构的关系 2. 堆排序详解 2.1 堆排序整体思路 2.2 思路详解 2.2.1  ...

  6. 排序算法——十大排序算法总结与对比

    一.十大排序算法复杂度对比 二.关于排序算法的总结 1.基数排序仅仅适用于整型数的排序,一般不与另外的排序方法一起比较. 2.关于算法的稳定性:不稳定的算法有 "快希选堆"--快速 ...

  7. 插入排序算法 java_排序算法实现-插入排序(Java版本)

    原标题:排序算法实现-插入排序(Java版本) 插入排序(英语:Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到 ...

  8. 插入排序java_排序算法之直接插入排序Java实现

    排序算法之直接插入排序 舞蹈演示排序: 冒泡排序: http://t.cn/hrf58M 希尔排序:http://t.cn/hrosvb 选择排序:http://t.cn/hros6e 插入排序:ht ...

  9. 选择排序 冒泡 java_排序扯淡:冒泡、选择、插入(Java)

    算法的本质 最近一直在想,算法的本质到底是什么,为什么有时云里雾里,有时却了然可见,深深思考了下,算法本质就是一个解决问题的思想,计算机的世界里需要的就是抽象的思想,有了抽象思想,你就有了高度,原谅我 ...

  10. 折半插入排序c语言 csdn,排序算法实大.doc

    排序算法实现大全 后面的例程,都是对数组的排序,使用静态链表的也适用于链表的排序.为简单起见,只对单关键码排序,并且最后的结果都是从头到尾按升序排列.下面是统一的测试程序:#include #incl ...

最新文章

  1. spring in action 4 第5章
  2. Windows 技术篇-设置dns提升网速,刷新dns缓存
  3. 产品经理必备知识之网页设计系列(三)-移动端适配无障碍设计及测试
  4. 全球及中国新鲜芒果制品市场投资份额与营销渠道分析报告2022版
  5. php_flag .htaccess,Apache服务器中.htaccess文件的实用配置示例集锦
  6. wait 和 sleep 区别
  7. 计算机视觉CV中RANSAC算法的学习笔记~
  8. 图像局部特征(十二)--BRISK特征
  9. 138. PHPExcel 操作
  10. linux温度监控软件,PSensor:Linux下硬件温度监控软件
  11. 阿里巴巴第三财季营收1172.78亿元,同比增41%
  12. 黑客黑手伸向微博微信手机成网络钓鱼主要渠道
  13. python写采集程序_python实现简易采集爬虫
  14. 【HISI系列】海思 IPC hi3516a、hi3519v101 的单包模式和多包模式
  15. 2023最新软件工程毕业设计题目汇总
  16. 现代 Web 开发的现状与未来(JSDC 2019 演讲全文)
  17. swift新手进阶30天一 自定义上图片下文字的UIButton的几种方式
  18. python网页爬虫漫画案例_Python爬虫 JS案例分析:爬取鬼灭之刃漫
  19. 健康管理系统开发笔记
  20. NEWS|药物发现公司正在定制ChatGPT:方法如下

热门文章

  1. 如何根据染色体坐标快速得到基因组的 DNA 序列
  2. 因子动量效应广泛存在吗?(下)
  3. FL Studio21官方版中文版水果音乐编曲制作软件下载
  4. matlab BP网络工具箱分类与回归
  5. 用VC实现洪水攻击程序
  6. 死磕自己,愉悦大家!
  7. 计算机组成原理实验七,计算机组成原理实验七
  8. html 语音播放插件,Html5添加audio音频播放器插件教程
  9. exchange2010 sp2 升级至 sp3
  10. IBinder、BBinder和BpBinder