排序算法 您所在的位置:网站首页 关键码序列建堆 排序算法

排序算法

2023-11-04 07:33| 来源: 网络整理| 查看: 265

堆排序

堆排序是通过堆这种特殊的数据结构进行排序的一种排序算法。

堆:由完全二叉树构成,且具有一定的大小关系;二叉树根为最小值的堆被称为小顶堆,反之,根节点为最大元素的堆被称为大顶堆。 对于一个堆,按层进行编号,根节点为0号,依次往下编号,对应于一个序列(集合)的下标。 堆的两个重要性质: 1、结点i的父节点为i/2; 2、结点i的左子节点为2i,右子节点为2i+1。

堆排序的基本思想是:设给待排序列构造成一个大顶堆(升序大顶堆、降序小顶堆),堆顶元素与最后一个元素交换,即把待排序列中的最大值放到最后一个位置。剩下的元素仍然构成一个堆,继续构造成为大顶堆,交换倒数第二个数······,直到堆只剩一个元素。

堆排序算法的时间复杂度为O(nlogn)。

伪代码 HEAPSORT(A) BUILD_MAX_HEAP(A) for i = A.length downto 2 exchange A[1] and A[i] A.heap_size=A.heap_size-1 MAX_HEAPIFY(A,1)

伪代码出自《算法导论》原书第3版,机械工业出版社,Thomas H.Cormen Charles E.Leiserson著

若存在序列:{7, 50, 1, 4, 32, 7, 9, 5, 25, 6},利用堆排序进行排序。 1、构造堆 在这里插入图片描述 2、构造出大顶堆 (方法一:时间复杂度nlogn) 在这里插入图片描述 (方法二:时间复杂度n) 在这里插入图片描述 (两种方法构造的大顶堆有所不同,但最终排序结果是一样的。接下去的步骤采用第一种方法。)

3、将堆顶的50与最后一个元素6交换,50已排好; 4、剩下的元素构造大顶堆。得到堆顶元素32,与最后一个元素4交换,32已排好; 5、重复第4步的操作,直至排序完成。

在这里插入图片描述

以上gif制作均来源于VisuAlgo https://



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有