美文网首页
排序二、堆排序

排序二、堆排序

作者: 是风荷不是松鼠 | 来源:发表于2019-03-24 15:11 被阅读0次
image
*图片演示的是大根堆-升序排列的情况,本文代码是小根堆-降序排列,思想是一样的

时间复杂度:O(nlogn)
空间复杂读:O(1)
不稳定排序

代码中,heapdown用于构造小根堆
heap_sort首先构造小根堆,然后交换首尾元素(则尾元素最小),再对余下元素构造小根堆,循环即可

        # 堆排序
        # 小根堆降序
        def heapdown(self, elems, begin, end):
            i, j = begin, begin * 2 + 1  # j为i的左子结点
            while j < end:
                # 让j指向子节点中小的那个
                if j + 1 < end and elems[j] > elems[j + 1]:
                    j += 1
                # 比较父节点和子节点的大小,父节点小则不需要再调动,父节点大交换父节点和子节点
                if elems[i] > elems[j]:
                    elems[i], elems[j] = elems[j], elems[i]
                    print('swap--', elems)
                i, j = j, j * 2 + 1

        def heap_sort(self, elems):
            end = len(elems)
            # 初始化,构造小根堆
            for i in range(end//2-1, -1, -1):  # 构造堆序。
                # print(i)
                self.heapdown(elems, i, end)
            # print(elems)
            # 交换堆顶和最后一个元素,余下元素再构造小根堆
            for i in range((end-1), 0, -1):  # 进行堆排序.i最后一个值为1,不需要到0
                print(elems)
                elems[i],elems[0] = elems[0],elems[i]
                self.heapdown(elems, 0, i)

            return elems

*自己写给自己看的博客
*文章内容不保证正确
*部分内容来源于网络,侵删
今天也是元气满满的一天哦~~
冲鸭~~QWQ

相关文章

  • 堆排序

    目录 1.堆排序介绍 2.堆排序图文说明 3.堆排序的时间复杂度和稳定性 4.堆排序实现 堆排序介绍 堆排序(He...

  • 堆排序---基础篇

    本文主要介绍堆排序的一些基本过程和分析。 大纲 堆排序简介 堆排序代码实现 1. 堆排序简介 1.1 堆排序的存储...

  • 堆排序

    概述 堆排序基于完全二叉树进行排序, 稳定性 堆排序不稳定 时间复杂度 堆排序的时间复杂度为 nlogn C代码

  • 堆和堆排序

    最小K个数 堆排序 堆排序

  • JS实现堆排序

    原理 堆排序原理 实现 说明 堆排序对大文件很有效 堆排序是不稳定排序

  • 排序

    八大排序算法 一、归并排序 递归及非递归的JAVA实现 二、快速排序 快排算法JAVA实现 三、堆排序 堆排序堆排...

  • 排序算法08:优先队列与堆排序

    堆排序一种是基于二叉堆的排序。本文将从优先队列讲起,循序渐进的实现堆排序。这也是《算法》第四版上讲解堆排序的大致章...

  • 堆排序

    转载:图解排序算法(三)之堆排序 预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选...

  • java堆排序

    什么是堆排序:图解堆排序堆排序:利用了堆这种数据结构堆数据结构:特殊的完全二叉树,因为具有以下的特点:1)每个结点...

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

网友评论

      本文标题:排序二、堆排序

      本文链接:https://www.haomeiwen.com/subject/mmsuvqtx.html