算法学习之堆排序

算法导论的学习--第六章 堆排序 算法导论(第三版) 第六章 堆排序 前言 本人是计算机专业学渣一枚,因前面算法课上课神游太虚,因此现在亡羊补牢,本文主要是本人对于学习过程的记录,说的不对的地方欢迎指正。 一、堆 书上用了两种形式来表示堆:数组和二叉树 java当中本身没有堆这个数据结构,如果想使用堆的话,可以通过优先队列来创建: Queue<Integer> minheap =new PriorityQueue<Integer>();//最小堆 Queue<Integer> maxheap =new 阅读详情

概念

  • 堆是一种特殊的完全二叉树,每个节点的值都大于或等于子节点的值,称为大顶堆,反之,称为小顶堆;注意:没有对节点的左右孩子节点的值做出要求

  • 大顶堆特点:arr[i] >= arr[2 * i +1 ] && arr[i] >= arr[2 * i + 2]

  • 小顶堆特点:arr[i] <= arr[2 * i +1 ] && arr[i] <= arr[2 * i + 2]

堆排序

  • 堆排序是利用堆这一数据结构设计的一种排序算法,堆排序是一种选择排序,他的最坏、最好、平均时间复杂度均为O(nlogn),是一种不稳定排序

基本思想

  • 将待排序列构成一个大顶堆

  • 此时堆的根结点即为最大值

  • 将其与末尾元素交换位置,此时末尾为最大值

  • 然后将剩余n-1个元素重新构成堆

  • 反复执行上述过程

树的节点特点

  • n0 + n2 = n

  • n0 = n2 + 1

  • 2* n2 + 1 = n

  • n2 = (n-1)/2

其中数字代表节点的度

这里直接上代码

public class HeapSort {

    /**
     * 堆排序: 将待排序列构成一个大顶堆,此时堆的根结点即为最大值,将其与末尾元素交换位置
     *        此时末尾为最大值,然后将剩余n-1个元素重新构成堆,反复执行上述过程
     *        从小到大排序用大顶堆,反之用小顶堆
     * @param arr
     * @return
     */
    public int[] heapSort(int[] arr) {
        // 1. 找到最后一个非叶子结点,即最后一个结点的父节点((arr.length - 1) - 1)/2 == arr.length/2 - 1
        //    观察到非叶子结点为倒数1 3 5 7 ...的父节点,其下标为arr.length/2-1 / arr.length/2-2 / arr.length/2-3
        int temp;
        // 每次长度-1
        for (int k = 1 ; k < arr.length ; k++) {
            //    节点非叶子节点个数 (arr.length - 1)
            for (int i = 0; i <= (arr.length - 1 - k) / 2; i++) {
                // 3. 找到下一个非叶子结点进行上述操作,直到根结点(i == 0),因为从下岛上进行交换,所以会打乱,重新进行比较交换
                for (int j = (arr.length - k) / 2 - 1; j >= 0; j--) {
                    // 2. 判断该节点与其左右孩子节点(2*i+1) (2*i+2)进行比较,并交换位置
                    if (arr[j] < arr[2 * j + 1]) {
                        temp = arr[j];
                        arr[j] = arr[2 * j + 1];
                        arr[2 * j + 1] = temp;
                    }
                    if (arr[j] < arr[2 * j + 2]) {
                        temp = arr[j];
                        arr[j] = arr[2 * j + 2];
                        arr[2 * j + 2] = temp;
                    }
                }
            }
            // 将根与末尾元素交换
            temp = arr[0];
            arr[0] = arr[arr.length - k];
            arr[arr.length - k] = temp;
        }
        return arr;
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
//        System.out.println("请输入数组长度: ");
//        int n = scanner.nextInt();
//        int arr[] = new int[n];
//        System.out.println("请输入数组元素: ");
//        for (int i = 0 ; i < n ; i++){
//            arr[i] = scanner.nextInt();
//        }
        int[] arr = {4 , 6 , 8 , 5 , 9 , 1};
        HeapSort heapSort = new HeapSort();
        arr = heapSort.heapSort(arr);
        for (int i = 0 ; i < arr.length ; i++){
            System.out.print(arr[i] + " ");
        }
        System.out.println();

    }
}

【软考】数据结构 - 堆结构(小顶堆、大顶堆和二叉堆) 大顶堆(Max Heap)是一种特殊的堆结构大顶堆堆的每个节点的值都大于或等于其子节点的值大顶堆通常用于实现优先队列,其中堆顶元素是最优先的元素。大顶堆是一种大于等于父节点的二叉堆,即每个节点的值都不小于其父节点的值。大顶堆的性质为堆顶元素不小于其子节点,即堆顶的值不小于其子节点的值。小顶堆(Min Heap)也是一种特殊的堆结构小顶堆的每个节点的值都小于或等于其子节点的值小顶堆通常用于实现优先队列,其中堆顶元素是最不优先的元素。 阅读详情

相关推荐

C++红黑树收关(五)--------红黑树其他方法补全

1、本篇补全红黑树的其他方法 find(); findMin(); findMax(); isEmpty(); makeEmpty(); 2、上代码 #include <iostream> using namespace std; template < class T> class RedBlackTree; //红黑树 template <class T> class RedBlackTreeNode...

p=f/s 661

数据结构:大顶堆、小顶堆

堆是其中一种非常重要且实用的数据结构。堆可以用于实现优先队列,进行堆排序,以及解决各种与查找和排序相关的问题。大顶堆和小顶堆都是堆数据结构的变种,它们分别能够在 O(1) 时间内访问最大和最小元素。无论是大顶堆还是小顶堆,插入元素和删除堆顶元素的时间复杂度都是 O(log n),其中 n 为堆中的元素数量。

crr411422的博客 1万+

ESP32-CAM图像糊成马赛克?OV2640参数调优保姆级教程(亮度/对比度/饱和度)

本文提供了一份详细的ESP32-CAM图像调优教程,针对OV2640摄像头常见的图像模糊问题,从分辨率设置、亮度/对比度/饱和度调整到高级寄存器配置,帮助用户优化网页显示画质。通过代码示例和实用技巧,解决马赛克、色彩暗淡等问题,提升摄像头性能。

weixin_30410119的博客 596

堆排序(浅谈大顶堆与小顶堆)

1、什么是堆? 堆是一种非线性结构,(本篇随笔主要分析堆的数组实现)可以把堆看作一个数组,也可以被看作一个完全二叉树,通俗来讲堆其实就是利用完全二叉树的结构来维护的一维数组,按照堆的特点可以把堆分为大顶堆和小顶堆。 大顶堆:每个结点的值都大于或等于其左右孩子结点的值 小顶堆:每个结点的值都小于或等于其左右孩子结点的值 2、堆的特点 我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面...

不务正业随手记 3万+

从零部署奥比中光Gemini335L:Python SDK编译与手眼标定环境实战

本文提供了一份从零部署奥比中光Gemini 335L深度相机的完整实战指南。详细介绍了驱动安装、Python SDK编译、CMake配置及虚拟环境搭建等关键步骤,并重点解析了如何通过编译生成Python模块,最终实现深度图与点云数据获取,为后续的机械臂手眼标定工作奠定坚实基础。

weixin_29031161的博客 399

Amesim基础篇-元件详解-流体库管路

Amesim基础篇-元件详解-流体库管路

2201_75375391的博客 4524

大顶堆

1. 概述: 最大堆(大顶堆) 一句话 heap:一种数据结构,完全二叉树(若二叉树高 h,则除过最底层 h 层,其他 1~h-1 层都是满的;并且最底层从左到右不能有空隙)。有最大堆和最小堆两种,最大堆即根节点的键值比其他所有节点键值都大;最小堆即根节点的键值比其他所有节点键值都小。在实现上,它没有选择一般的二叉树数据结构(即一个节点包含指向两个孩子的指针),使用的是数组;heap 最为常用的...

ddddfang的专栏 6157

01-FreeSWITCH 的安装、部署、配置以及可能遇到的问题和解决方法

一文让您了解从FreeSWITCH 的安装、部署、配置、可能遇到的问题及解决方法。一切从实际项目出发,以工程应用为目的。

秋风的博客 2128

php堆排序,排序算法学习之路——堆排序

和其他排序算法一样,在这里我们先看一下堆排序的定义堆排序(Heapsort):是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。从上面的定义的最后一句话中我们同样可以得出两个概念——大顶堆、小顶堆。所谓大顶堆就是子节点的键值或索引总是小于它的父节点。通过大顶堆得出的序列是递增的。所谓小顶堆就是子节点...

weixin_30271235的博客 249

数字IC笔记-逻辑单元库和库文件

逻辑单元库的建立: 一个完整的单元库是由不同的功能电路所组成,在芯片应用中可分为三类: 标准单元:反相器、与门、寄存器、选择器、全加器。组合逻辑电路和时序逻辑电路。互补,反向,非反向,其他。锁存器、寄存器。 模块宏单元:ROM、RAM 输入输出单元 库文件: 在逻辑综合产生门级网表和物理设计做布局布线的过程中需要两个重要的库文件,就是物理库(lef)和时序库(lib) 1.物理库LEF文件 LEF是版图级的抽象文件,主要用于布局和布线。目前普遍使用的是由Candence开发的LEF文件格式,以le

sinat_41774721的博客 9142

使用Hyper-V使用下载下来的macOS安装引导安装macos

然后关闭工具返回安装界面选择第二个reinstall,选择119g那个硬盘。我的资源上传了:macOS Monterey on Hyper-V.7z。设置固件的启动顺序,引导安装盘放到第一位,mac安装110g放第二。选择disk utility格式化那个110g。下载解压的macos引导挂载到虚拟硬盘。其他设置安全禁用,检查禁用,集成都选中。新建一个虚拟硬盘装mac,110g。

viviliving的专栏 3025

算法学习-堆排序

堆排序-C++实现

qq_43054786的博客 874

告别地图偏移!手把手教你用MapOnline V1.2在ArcGIS里加载无偏谷歌影像和历史影像

本文详细介绍了如何使用MapOnline V1.2插件在ArcGIS中加载无偏谷歌影像和历史影像,解决GIS工程师长期面临的地图偏移问题。通过三步安装配置、无偏影像加载和时空分析功能,提升地理信息数据的精确度和工作效率,特别适用于城市规划、环境监测等场景。

weixin_29252171的博客 232

算法学习系列(十五):最小堆、堆排序

这个堆排序的话,考的还挺多的,主要是构建最小堆,并且在很多情况下某些东西还用得着它来优化,比如说迪杰斯特拉算法可以用最小堆优化,然后面试和考研用的也是挺多的,总之开始吧。

weixin_60033897的博客 3598

citespace基本操作

聚类分析 时间线图 这些结果都是高被引文献的相关呈现结果,代表该领域的文献基础 下面可以看看该project的前沿领域 选择keywords 和term go! 调整显示方式 生成凸线图:表示 在某个研究领域或者时间段内 ,大家对某个领域或者某个词的关注度突然增高,凸显前沿方向的转变 以此来发现热点 ...

生信小博士的博客 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

算法学习之堆排序算法

堆排序算法: 1、像合并排序算法一样,运行时间都为O(nlgn); 2、像插入排序算法一样, 都是原地排序算法,不需要开销多余的内存空间; 一、堆的介绍 首先,将我们需要排序的数列转化为一颗完全二叉树。树中的每一个节点与数组中的存放该节点值的那个元素对应。 假设:我们需要排序:int arr[] = {3, 2, 1, 9, 11, 4, 5}这个数列,则将它转化为二叉树,如图所

Becky的专栏 838

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【算法学习】 堆排序算法

完全二叉树:在一个满二叉树中,在最下层从最右侧起,去掉相邻的若干叶子结点,得到的二叉树称为完全二叉树。 堆其实就是一棵完全二叉树。 大顶堆 堆顶元素(即第一个元素)为最大项,并且二叉树的父结点都大于子结点。 小顶堆 堆顶元素为最小项,并且二叉树的父结点都小于子结点。 堆排序 堆排序就是利用堆进行排序的算法,它的基本思想是,将待排序的序列构成一个大顶堆。此时整个序列的最大值就是堆顶...

愿万事胜意 361

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

算法学习——堆排序

堆排序堆的概念堆排序相关的两个函数Heapity(构造堆函数)HeapSort(int arr[ ],int len)(堆排序函数)完整代码 堆的概念 堆(Heap)可以定义为一棵二叉树,树的节点中包含键(每个节点一个键),并且满足以下两个条件:(1)这棵二叉树是基本完备的(或者称为完全二叉树)。(2)父母优势,即每个节点的键都要大于或等于它子女的键。 堆排序相关的两个函数 堆排序的平均时间复杂度为O(nlog n) 函数Heapity(int arr[ ], int start, int end)负责构造

qq_44628008的博客 279

python算法学习(7)——堆排序

列表排序的重要排序有三种,分别是快速排序、堆排序和归并排序。

qq_74868273的博客 1960

算法学习之———堆排序

1.堆是实现优先队列的首选数据结构,最常见的是二叉堆。 2.堆的性质: 小顶堆:每一个父节点的值总是不大于它的孩子节点的值。 大顶堆:每一个父节点的值总是不小于它的孩子节点的值。 堆包含的操作有: insert()(插入操作),extractmin()提取最小(用于小顶堆),exectractmax()提取最大(用于大顶堆),peek()读取,delete()删除。 3.由于堆是一颗形...

大魚的个人博客,如有不足,欢迎指正。 224

堆排序HeapSort算法学习

在程序设计相关领域,堆(Heap)的概念主要涉及到两个方面: 一种数据结构,逻辑上是一颗完全二叉树,存储上是一个数组对象(二叉堆)。 垃圾收集存储区,是软件系统可以编程的内存区域。 本文所说的堆,指的是前者。 堆排序的时间复杂度是O(nlgN),与快速排序达到相同的时间复杂度。但是在实际应用中,我们往往采用快速排序而不是堆排序。这是因为快速排序的一个好的实现,往往比堆排序具有更好的表现

arhaiyun的专栏 795

算法--堆排序学习以及模板

堆排序学习以及模板 #include #include int getParent(int i) { return (int)(i/2); } int getLeftSon(int i) { return (i*2); } int getRightSon(int i) { return (i*2 + 1); } void PrintHeap(i

a656343072的专栏 9381

python实现堆排序算法_堆排序学习笔记及堆排序算法的python实现

堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。堆排序是一种选择排序,其时间复杂度...

weixin_39533742的博客 230

学习回顾算法(堆排序算法)

堆排序算法简介堆排序(Heapsort)是指利用堆积数(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆要求是每个节点的值都不大于其父节点的值。在数组的非降序排序中,需要使用大根堆。因为最大值一定在堆顶。堆排序原理堆排序利用了大根堆(或小根堆)堆顶记录的值最大(或最小)这一特征。 一、用大根堆排序的基本思

课前的博客 502

堆排序算法学习

堆排序算法学习、理解、感受

qq_49042913的博客 178
下一篇: 算法学习之插入排序
管管儿
博客等级 码龄7年 1粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值