堆排序代码解析(堆排序的算法及代码实现)

目前这个系列的文章都挑着非常经典的,让人眼前一亮的算法,今天的堆排序算法就是其中一个。首先理解什么是堆,这里面堆(Heap)并不是程序中内存区域,而是一种完全二叉树表示的数据结构。堆具有以下特点 是一个完全二叉树堆的每个节点的值必须大于等于左右树节点(大顶堆),或小于等于左右树节点(小顶堆)。 简单说明下,完全二叉树是除了最后一层叶子节点外,其他的节点都有两个子树,而叶子节点可以没有子树,或者只有…

现阶段这一系列产品的文章内容都挑着十分经典的,令人眼前一亮的优化算法,今日的堆排序算法便是这其中一个。 最先了解什么叫堆,这里边堆(Heap)并非程序流程中运行内存地区,反而是一种完全二叉树表明的算法设计。 堆具备下述特性

  • 是一个完全二叉树
  • 堆的每一个结点的值务必高于或等于上下树连接点(大顶堆),或不大于上下树连接点(小顶堆)。

简易表明下,完全二叉树是除开最终一层叶子节点外,别的的连接点都是有2个子树,而叶子节点可以沒有子树,或是仅有左子树。 如下图便是个大顶堆:

那些经典的算法-堆排序
那些经典的算法-堆排序

小顶堆

那些经典的算法-堆排序

堆储存

堆由于是完全二叉树,特别适合用二维数组储存,图中为大顶堆的储存状况,在其中a[0]不用, a[1]为大顶堆的端点,也就是较大的数据信息,a[12]= 7 为左子树端点,a[12 1]= 6为右子树的顶点,别的连接点状况依次类推。

堆的二种实际操作

向堆插进元素

用图来表明如下所示:

那些经典的算法-堆排序

向堆插进元素,先插入到最后一个二维数组元素部位,随后和自身的父节点6较为,因为比6大不符合大顶堆的标准,因此9和6互换,随后9再和堆顶元素8较为,又不符合大顶堆标准,再次互换,最终产生一个大顶堆,这一流程叫堆化。

删掉堆顶元素

针对大顶堆而言,堆顶的元素为最高值,先后删掉堆顶元素并輸出,那麼便是将数据从大向小排序了。

这里边又个方法,便是删掉堆顶元素的情况下,不可以立即删掉,要用堆顶元素和最后一个元素做互换,随后依据堆的特性调节堆,直到符合条件。

那些经典的算法-堆排序

详细编码如下所示:

package com.dianneng.lms;

public class TestHeap {
    private int [] a;
    private int n;
    private int count;

    public TestHeap(int cap) {
        a = new int[cap 1];
        n = cap;
        count = 0;
    }

    public void swap(int i,int j) {
        int tmp = a[i];
        a[i] = a[j];
        a[j] = tmp;
        return;
    }

    public void print(){
        for (int i = 0; i <= count;i  ) {
            System.out.print(a[i] \"t\");
        }
    }

    public int insert( int v) {
        if (count == n) {
            System.out.println(\"Heap is full!\");
            return -1;
        }else {
            a[  count] = v;
            int i = count;
            while (i/2 >0 && a[i] > a[i/2]) {
                swap(i,i/2);
                i = i/2;
            }
        }
        return 0;
    }

    public int  removeMax() {
        if (count == 0)  {
            return -1;
        }
        System.out.print(a[1] \"t\");
        a[1] = a[count];
        --count;
        heapify(count,1);
        return 0;
    }

    private void heapify(int n, int i) {
        while(true) {
            int maxPos = i;
            //根据上下子树端点较为得到最大值连接点
            if (i*2 <= n && a[i] <a[i*2] ){
                maxPos = i*2;
            }
            if (i*2 1 <= n && a[maxPos] < a[i*2 1]) {
                maxPos = i*2 1;
            }
            //已经是较大的不用互换了
            if  (maxPos == i) {
                break;
            }
            //必须互换
            swap(i,maxPos);
            //i偏向待互换的
            i = maxPos;
        }
    }

    public  static void main(String [] args) {
        TestHeap th = new TestHeap(18);
        th.insert(8);
        th.insert(7);
        th.insert(6);
        th.insert(5);
        th.insert(4);
        th.insert(3);
        th.print();
        System.out.println();
        while(th.removeMax() == 0) {

        }
    }
}

可以运用大顶堆的特点,对要排列的二维数组开展先堆化排列,随后先后互换堆顶元素和最后一个元素,交换后堆化,将堆的尺寸减一,最后那样輸出的是由小到大排列的二维数组。 使用教师的一个图表明:

那些经典的算法-堆排序

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年5月9日 上午11:57
下一篇 2022年5月9日 上午11:59

相关推荐

  • 微博怎么营销自己的产品,利用微博营销运营推广引流方法

    如何利用微博做产品营销?产品营销——一切围绕以激发消费者购买欲望和行为的一切经营活动。 一切产品的营销都贵在策划,重在执行。微博营销亦然。 为客户提供最优的价值压倒一切。 接下来就是如何让客户找到你、记住你、喜欢你、认可你、消费你的漫长过程了。 在如何利用微博做产品营销的分析中,口碑营销——口碑营销(IWOM),是指企业有意识或无意识的生成、制作、发布口碑题材,并借助一定的渠道和途径进行口碑传播,…

    2022年7月22日
    730
  • 上海财经大学地址在哪,财经大学最火爆的三个专业

    今天给大家分享的内容是上海财经大学。上海财经大学(ShanghaiUniversityofFinanceand Economics)是中华人民共和国教育部直属的一所以经济管理学科为主,经、管、法、文、理、哲等多学科协调发展的研究型重点大学,国家首批世界一流学科建设高校,国家“211工程”、“985工程优势学科创新平台”重点建设高校,入选国家“111计划”、卓越法律人才教育培养计划、国家级大学生创新…

    2022年10月7日
    420
  • 4k电视推荐,选购4k电视的基本常识

    智能电视之所以称之为智能,除了一块大大的夜景屏幕之外,还有完善的操作系统,你可以把他理解成一部60英寸屏幕的手机。但是很多人还拿来之前老一套看电视的方法用智能电视,你真的out了! 下面我来教大家几个智能电视实用小功能; 语音输入 电视上最难操作的就是输入了,当你看到这样的界面,再看看手里只能的遥控器的话, 相信你基本上没有输入的欲望了。然而很多智能电视都支持语音输入,轻轻一按语音按钮,就能轻松地…

    2022年6月30日
    490
  • 苹果最新笔记本是哪款,苹果mac机型配置对比

    11月14日凌晨,苹果悄然发布了新一代的16英寸MacBookPro。作为苹果Mac笔记本中的高端系列,MacBookPro一直是很多专业人士的最爱。这一次苹果以“高能,召唤高手”的slog为其宣传标语,快让我们看看它有着哪些升级之处吧! 新一代的16英寸MacBook Pro沿用了系列的设计语言,但外部改变不可谓不大:屏幕由15英寸提升至16英寸,显示效果依然出众;前代表现不佳的键盘完全重做,采…

    2022年8月24日
    490
  • 移动办公软件有哪些,手机办公app排名

    摘要:伴随近几年移动互联网的迅速风靡,App也随着智能手机的普及成为了各个企业眼中的风口。随着移动办公逐渐成为一种趋势,广大用户对于多平台之间数据连通的要求也越来越高,有哪些鲜为人知的好用的手机软件呢? 一、记事工具-随笔记App 用它记录日记、购物清单、心情想法、笔记等等都非常方便,支持文字、录音、拍照、手写等,在提供丰富实用功能的同时保持简洁的界面和操作交互。有无限次云端同步、本地备份、原图上…

    2022年6月4日
    800
  • 苹果手机怎么导出照片,很简单只需四个步骤就搞定

    要点: iPhone手机和电脑互传照片最便捷的方法: ——QQ应用快速互传照片(适合少量照片) ——使用数据线连接,从电脑桌面进入iPhone文件盘拷贝照片(适合iPhone手机批量照片上传电脑) 正文: 现在,人们生活、工作、娱乐、社交等越来越依赖于智能手机——“机不可失”,由此许多拍摄的照片和截屏、下载的图片等需要与电脑之间进行传输。 《电脑与iPhone手机互传照片示意图》 iPhone手机…

    2022年7月11日
    580
  • 有道语音翻译怎么样(最好的语音翻译软件app推荐)

    很久很久以前,我们学习英文的时候,除了纸质字典,还有一个在当时属于比较先进的电子词典,能查词义能听发音还有小游戏,这让电子词典成为了当时风靡之物。   不过到了现在,硬件版的电子词典已经逐渐的没落,因为人们只需要在电脑或手机上安装上一款词典软件,就可以完全替代硬件版的电子词典功能了。   词典软件有许多,今天我们就来看看有道出品的有道翻译官4.0新版本,看看它都有着哪些实用功能可供大家使用。 图1…

    2022年5月9日
    1710
  • 怎样提高工作效率,这八个小妙招一定要掌握

    世界上的人大多分为两种:一种人能把事情办得妥妥帖帖,另外一种人做事永远拖泥带水,不尽人意。时间不设价格,价值却连城,我们每个人每天都要应付各式各样的事情和任务。终日忙碌,并不代表能工作高效。花10分钟了解一下这些提高效率的方法吧,学起来之后你会受益匪浅。 1.学会区分“紧急”和“重要”事项 一件今天紧急的工作,或许到了明天就不重要了。你应该知道,哪些是紧急工作,需要马上着手;哪些工作尽管重要,但还…

    2022年9月16日
    1140
  • 做一个网站的成本,快速带你了解建站步骤

    关于网站设计成本的问题在网上很常见,但很少有人愿意回答,即使是专业的网页设计公司和自由设计师。 当谈到决定网站的成本时,它归结为你要得到的所付的钱。一个更便宜的网站会有更少的内容和更少的功能,而一个更昂贵的网站会有很多额外的设计和功能。你的整体网站成本,如功能和交互元素,可能还包括多媒体,总之,完全取决于你想要什么。 与其他商品和服务一样,随着时间的推移,设计、开发和建立网站的成本也在不断变化。 …

    2022年10月5日
    450
  • 35类商标是什么意思,35类商标的真正作用介绍

    我们都知道商标一共有45个类别,但是在商标界,第35类商标经常被人称作是万能商标,那么号称万能商标的第35类商标到底是什么?为什么被称为万能商标? 在商标分类中,其中1至34类是商品类别,35至45类是服务类别。第35类商标主要包括由个人或组织提供的服务,主要包含以下类目: 【3501】广告 【3502】工商管理辅助业 【3503】替他人推销 【3504】人事管理辅助业 【3505】商业企业迁移 …

    2022年8月1日
    550

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信