堆排序简介 ╰+攻爆jí腚メ 2022-11-21 09:55 120阅读 0赞 **1.基本思想:** 堆排序(Head sort)就是利用堆(假设利用大顶堆)进行排序的方法。他的基本思想如下: 将待排序的序列构造成一个大顶堆。此时,整个序列的最大值就是堆顶的根结点,将他移走(其实就是将其与堆数组的末尾元素交换,此时末尾元素就是最大值),然后将剩余的n-1 个序列重新够造成一个堆,这样就会得到n个元素中的值,如此反复便会得到一个有序序列。 **问题: 1、如何由一个无序序列构建一个大顶堆? 2、如果在输出堆顶元素后,调整剩余元素成为一个新的堆。** ![在这里插入图片描述][20201031163551125.gif_pic_center] **2、代码演示** /*对顺序表L进行堆排序*/ void HeadSort(SqList *L) { int i; for(i=L->length/2;i>0;i--)//把L中的r构建成一个大顶堆 HeadAdjust(L,i,L->length); for(i=L->length;i>1;i--) { swap(L,1,i)//将堆顶记录和当前未经排序子序列的最后一个记录交换 HeadAjust(L,1,i-1);//将L->r[1...i-1]重新调整为大顶堆 } } 解释: 第一个for 循环 构建一个大顶堆 第二个for循环 逐步将每个最大值的根节点与末尾元素交换,并且再调整其为大顶堆 堆调整L->r\[s\]的关键字,使L->r\[s…m\]成为一个大顶堆 void HeadAdjust(SqList *L,int s,int m) { int temp,j; temp=L->r[s]; for(j=2*s;j<=m;j*=2)//沿关键字较大的孩子结点向下筛选 { if(j<m&& L->r[j]<L->[j+1]) ++j;//j为关键字中较大的记录的下标 if(temp>=L->r[j]) break;// rc应插入在位置s上 L->r[s]=L->r[j]; s=j; } L->r[s]=temp; //交换 s j } **3.效率分析** 运行时间主要消耗在初始构建堆和在重建堆时的反复筛选上。 构建整个堆的时间复杂度为O(n) 重建整个堆的时间复杂度为O(nLogn) 总体来说:堆排序时间复杂度为O(nLogn) [20201031163551125.gif_pic_center]: /images/20221120/91782cc63f6942da87e9cd74dfc17d01.png
相关 堆排序简介 1.基本思想: 堆排序(Head sort)就是利用堆(假设利用大顶堆)进行排序的方法。他的基本思想如下: 将待排序的序列构造成一个大顶堆。此时,整个序列的最大值就是堆 ╰+攻爆jí腚メ/ 2022年11月21日 09:55/ 0 赞/ 121 阅读
相关 排序-堆排序 1.堆排序前言 前面博客中讲到简单选择排序,它在待排序的n个记录中选择一个最小的记录需要比较n-1次。本来这也可以理解,查找第一个数据需要比较这么多次是正常的,否则如何知 旧城等待,/ 2022年09月30日 06:45/ 0 赞/ 243 阅读
相关 【排序】堆排序 堆的定义 设有n个元素的序列 k1,k2,…,kn,当且仅当满足下述关系之一时,称之为堆。 ![图示][SouthEast] 解释:如果让满足以上条件的元素序列 (k 分手后的思念是犯贱/ 2022年06月18日 11:47/ 0 赞/ 281 阅读
相关 看懂堆排序——堆与堆排序(三) 看懂堆排序——堆与堆排序(三) 看懂堆排序——堆与堆排序(三) 堆排序的基本思想 代码详解 偏执的太偏执、/ 2022年05月25日 06:52/ 0 赞/ 304 阅读
相关 排序——堆排序 堆排序代码 include <iostream> using namespace std; include <stdio.h> in 墨蓝/ 2022年05月21日 12:05/ 0 赞/ 272 阅读
相关 堆排序 什么是堆排序,堆排序能解决什么问题? 在排序的过程中,不能把进行排序的过程中,得一些信息保留下来吗?来加快排序的速度吗?答案是可以的。通过利用完全二叉堆的结构来保留信息。 迷南。/ 2021年10月29日 07:20/ 0 赞/ 382 阅读
相关 堆和堆排序 堆排序 堆排序基本介绍 1. 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复 杂度均为 O(nlogn),它也 柔光的暖阳◎/ 2021年10月19日 21:12/ 0 赞/ 414 阅读
相关 堆排序 文章目录 一、堆排序介绍 二、如何进行堆排序 一、堆排序介绍 百度百科: 堆排序(Heapsort)是指利用堆积树 我会带着你远行/ 2021年10月18日 16:46/ 0 赞/ 367 阅读
相关 排序-堆排序 [2019独角兽企业重金招聘Python工程师标准>>> ][2019_Python_] ![hot3.png][] 在说明堆排序的过程前得先了解什么是堆: 先看下图(来源 清疚/ 2021年09月20日 03:22/ 0 赞/ 452 阅读
相关 堆排序 堆排序的特点是:在排序过程中,将待排序数组看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中父结点和子结点之间的内在关系,在当前无序区中选择关键字最大(或最小) 不念不忘少年蓝@/ 2021年09月17日 00:16/ 0 赞/ 474 阅读
还没有评论,来说两句吧...