选择排序之堆排序

【数据结构】选择排序—堆排序 ​堆排序是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 ​ 阅读详情

1.堆排序的基本介绍

(1)堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。
(2)堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子节点的值,称为大顶堆,注意:没有要求节点的左孩子的值和右孩子的值的大小关系。
(3)每个节点的值都小于或等于其左右孩子节点的值,称为小顶堆。
(4)大顶堆举例说明:
在这里插入图片描述
(5)小顶堆举例说明
在这里插入图片描述

2.堆排序的基本思想

(1)将待排序序列构造成一个大顶堆。
(2)此时,整个序列的最大值就是堆顶的根节点。
(3)将其与末尾元素进行交换,此时末尾就为最大值。
(4)然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了。

3.堆排序的步骤图解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
简单总结下堆排序的基本思路:
(1)将无序序列构成一个堆,根据升序降序需求选择大顶堆或小顶堆。
(2)将堆顶元素与末尾元素交换,将最大元素与数组末尾元素交换。
(3)重新调整结构,使其满足堆定义,然后继续交换堆顶元素与当前末尾元素,反复执行调整+交换,知道整个序列有序。

4.代码实现

@Test
public void testSort(){
    //我们来测一下各种排序速度
    int[] array = new int[100000];
    for (int i = 0; i < array.length; i++) {
        array[i] = (int) (Math.random()*100000);
    }
    long start = System.currentTimeMillis();
    //bubbleSorting(array);//冒泡排序排序100000个数总耗时17984毫秒
    //selectSorting(array);//选择排序排序100000个数总耗时3203毫秒
    //insertSorting(array);//直接插入排序100000个数总耗时1109毫秒
    //shellSortByExchange(array);//希尔的交换排序100000个数总耗时7829毫秒
    //shellSortByMove(array);//希尔的移动排序100000个数总耗时16毫秒
    //quickSort(array,0,array.length-1);//快速排序的移动排序100000个数总耗时31毫秒
    //mergeSort(array,0,array.length-1,new int[array.length]);//归并排序的移动排序100000个数总耗时16毫秒
    //cardinalitySort(array);//基数排序的移动排序100000个数总耗时31毫秒
    heapSort(array);//堆排序的移动排序100000个数总耗时14496毫秒
    long end = System.currentTimeMillis();
    System.out.println("总共耗时:"+(end-start));
}
//堆排序
public void heapSort(int[] array) {
    int temp = 0;
    //得到所有非叶子节点的下标,进行调整
    for (int i = array.length/2-1; i >= 0 ; i--) {
        adjustHeap(array,i,array.length);
    }
    //将堆顶元素与数组的末尾元素进行交换
    for (int i = array.length-1; i > 0 ; i--) {
        temp = array[i];
        array[i] = array[0];
        array[0] = temp;
        //重新进行调整
        for (int j = i/2-1; j >= 0 ; j--) {
            adjustHeap(array,j,i);
        }
    }
}

/**
 * 将以index为非叶子节点的树调整为最大堆
 * 例如,array = {4,6,8,5,9}
 *      4
 *   6     8
 * 5   9
 * 传入index=1时,经过adjustHeap方法调整后,array={4,9,8,5,6}
 *      4
 *   9     8
 * 5   6
 * 在传入index=0时,经过adjustHeap方法调整后,array={9,6,8,5,4}
 *      9
 *   6     8
 * 5   4
 * @param array 待调整的数组
 * @param index 非叶子节点在数组中的索引
 * @param length 待调整数组元素的个数
 */
public void adjustHeap(int[] array, int index, int length) {
    //先取出非叶子节点的值
    int temp = array[index];
    //i指向当前非叶子节点的左子节点,完全二叉树满足left=2n+1,right=2n+2,
    //n为非叶子节点,left和right分别表示左右子节点
    for (int i = 2*index+1; i < length; i=2*i+1) {
        //比较当前非叶子节点的左右子节点的大小
        if (i+1 < length && array[i] < array[i+1]) {
            //如果右子节点大那么i就指向右子节点
            i++;
        }
        //比较非叶子节点和子节点的大小
        if (array[i] > temp) {
            array[index] = array[i];//把非叶子节点和子节点交换
            index = i;//index指向交换的子节点
            continue;
        }
        break;
    }
    //当for循环之后,就已经将以index为根节点的树中的最大值放到了最顶处
    //把temp放到调整后的合适位置
    array[index] = temp;
}
unity shader 后处理实现水墨风格渲染「Low Poly 」变「水墨画 」 水墨风格渲染 这次学校的比赛打算做一个中国古代背景的游戏,所以尝试做了水墨风格的渲染。 主要按以下四步来实现的效果: 根据色调和饱和度调整饱和度。 对图像进行模糊 水墨风格的物体边缘 物体内画笔笔触的模拟 接下来我分别就这四步依次展开说明: 调整饱和度 这里我使用Post-Processing Stack 的Color Grading 来调节饱和度,通过使用Grading Curv... 阅读详情

相关推荐

保姆级教程:断网环境下用Flexnet服务器搞定SolidWorks 2021安装与破解(附错误5解决方案)

本文提供SolidWorks 2021在断网环境下的企业级部署指南,详细解析Flexnet服务器本地化工作原理,并给出安装与破解的实战方案,特别针对常见的'错误5'问题提供多维度解决方案。适用于需要内网隔离或移动办公的工业设计场景,确保数据安全与授权合规。

weixin_28683391的博客 301

数据结构排序算法——堆排序

堆排序属于选择排序,是对简单选择排序的一种优化。堆排序算法利用了完全二叉树的特点,这里的堆指的就是完全二叉树。完全二叉树的定义:除了最后一层之外的其他每一层都被完全填充,并且所有结点都保持向左对齐。左对齐的意思就是一个非叶子结点只要有右孩子就一定有左孩子。堆排序中堆分为两种,一种大顶堆(父结点大于等于孩子结点,根结点最大),一种小顶堆(父结点小于等于孩子结点,根结点最小),本文以大顶堆为例。说明:...

不试一下你怎么知道自己有多强?最不像程序员的程序员的专栏 555

告别手动拍照!用Python+JAKA机械臂+D455相机实现全自动手眼标定(附完整代码)

本文详细介绍了如何利用Python脚本实现JAKA机械臂与Intel RealSense D455相机的全自动手眼标定流程,提供从硬件配置到代码实现的完整解决方案。通过自动化标定,显著提升工业自动化中的精度和效率,适用于机器人视觉领域的二次开发需求。

weixin_30555125的博客 524

堆排序与选择排序的关联

堆排序与选择排序的关联 一、简单选择排序 基本思想:假设排序表为 L[1…n] ,第i趟排序即从L[i,n] 中选择关键字最小的元素与 L(i) 交换,每一趟排序可以确定一个元素的最终位置,这样经过 n-1 趟排序就可以使整个排序表有序。 选择排序的执行过程为每次循环遍历数组找出最小(或最大)的数,将其放在数组的有序数列的最后面,每次第i次遍历查找要执行N-i个单位时间,然后要执行N次,故时间复杂度为O(N^2),很简单,比较适合较小的数列的排序。 代码如下: public static v

yyyggyy的博客 336

物料帐配置之 重估消耗

物料帐配置 ML material ledger

SAP刺客的博客 5912

软件缺陷(定义+表现形式+优先级+信息+产生原因),看完这篇文章就懂了

软件缺陷软件缺陷的定义软件缺陷的表现形式软件缺陷产生的原因软件缺陷的根源软件缺陷的费用软件缺陷的信息 软件缺陷的定义 IEEE 1983 of IEEE Stardard 729中软件缺陷做了一个标准的定义: 从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题;从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背。 因此软件缺陷就是软件产品中所存在的问题,最终表现为用户所需要的功能没有完全实现,没有满足用户的需求。 缺陷不是bug,缺陷包含bug,缺陷的范围更大。 软件缺陷

qq_40676418的博客 1万+

堆排序算法

一、堆排序算法的基本特性时间复杂度:O(n*lgn)最坏:O(n*lgn)空间复杂度:O(1)不稳定。 堆排序是一种选择排序算法,与关键字的初始排列次序无关,即就是在最好,最坏,一般的情况下排序时间复杂度不变。对包含n个数的输入数组,平均时间为O(nlgn),最坏情况(已经排好序)也是是O(nlgn),最好情况(完全无序)也是O(nlgn)。由于不但时间复杂度少,而且空间复杂度也是最少的,所以是...

weixin_30369087的博客 261

车载机器人终极解决方案:从功能叠加到生态融合的颠覆性变革

本文提出一种融合智能汽车与家居技术的车载机器人架构。其创新点包括:1)基于多模态传感器的拟人化硬件设计,实现声源定位误差<5°、体温检测精度±0.3℃;2)跨模态情感计算引擎,综合面部表情、心率等数据构建三维情绪模型;3)协议自适应中间件,支持小米、华为等多品牌智能家居设备即插即用;4)环境自适应舵机控制,-30℃环境下扭矩保持率达92.5%。测试数据显示,该方案使交互步骤减少60%,用户满意度提升58%,日均使用时长增加2.3倍,为"人-车-家"生态融合提供了可行技术路径。

qq_42671193的博客 1130

常见排序算法之选择排序——直接选择排序、堆排序

哈喽大家好,我是保护小周ღ,本期为大家带来的是常见排序算法中的选择排序,主要有直接选择排序以及——堆排序(有点难理解),包您一看就会,快来试试吧~ ​

保护小周ღ的博客 2341

超声相控阵合成孔径成像FPGA设计介绍

1.仿真预览 2.理论分析 系统的基本结构如下所示: 以上是实际中完整的结构,系统中会涉及到两块板子中的时钟,这个就是设计一个时钟采样同步的问题,即所谓的时钟同步。一般这种情况,往往使用内插的方式来解决。这是由于,在实际中,超生波接收到的信号是由本身系统发送出去反射回来得到的,因此从另外一方面将,其是同步的。但是在接收的时候通过内插的方法解决其中的延迟问题。 根据论文中的介绍,整个系统分为如下几个部分: ·模拟发送信号,这个部分由MATLAB产生测试数据并量...

FPGA/MATLAB学习教程/源码/项目合作开发 2072

高效计算斐波那契数列的C++实现及源码

斐波那契数列是一个非常经典的数学问题,通常递归方式计算斐波那契数列的时候会有很大的时间复杂度问题。首先,我们需要了解斐波那契数列的定义:斐波那契数列是指前两个数都为1,从第三个开始每个数都等于它前面两个数之和。因此,斐波那契数列的前几项为:1、1、2、3、5、8、13、21……在这个代码中,我们首先判断n是否特殊情况(即n等于0、1、2),然后通过循环计算得出对应的斐波那契数列值。通过这个例子,我们可以发现使用C++语言实现高效斐波那契数列计算的代码简单、易懂,并且时间复杂度相比递归方式有了很大的提升。

TechInk的博客 548

HDMI接口及其在编程中的应用

在编程中,我们可以使用HDMI接口来控制和管理连接到计算机的HDMI设备。本文将介绍HDMI接口的基本原理以及如何在编程中使用HDMI接口。在编程中,我们可以使用HDMI接口来控制和管理连接到计算机的HDMI设备。本文介绍了HDMI接口的基本原理,并提供了使用Python编程语言和相关库实现HDMI接口应用的示例代码。我们可以使用编程语言提供的音频库来生成和播放音频,并将其通过HDMI接口输出到连接的设备上。我们可以使用编程语言提供的音频库来生成和播放音频,并将其通过HDMI接口输出到连接的设备上。

CodeByte的博客 804

【排序算法】选择排序、堆排序

堆排序是一种基于堆(Heap)数据结构的排序算法。最大堆:每个节点的值都大于或等于其子节点的值。根节点是最大值。最小堆:每个节点的值都小于或等于其子节点的值。根节点是最小值。首先将无序数组构建为一个最大堆。然后,将堆顶(即最大值)与数组的最后一个元素交换,缩小堆的范围,对剩下的元素继续调整成最大堆,直到排序完成。

2301_76677973的博客 2940

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

排序-选择排序与堆排序

排序-选择排序与堆排序

2302_79539362的博客 2453

深度学习工具包 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")

选择排序和堆排序

排序算法是计算机科学中的基础工具之一,对于数据处理和算法设计有着深远的影响。了解不同排序算法的特性和适用场景,能够帮助程序员在特定情况下选择最合适的算法,从而提高程序的效率和性能。本节我们讲述选择排序和堆排序。

MindbniM的博客 1497

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

十大经典排序之:选择排序 |堆排序

十大经典排序之:选择排序 |堆排序选择排序选择排序原理算法实现例题堆排序堆排序原理算法实现例题

菜菜bu菜的博客 1612

选择排序 ( 直接选择排序 && 堆排序 )

1、直接选择排序 ???? 核心思想 ????   每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。 ❗ 过程:❕   1️⃣ 在元素集合 array[i] - array[n-1] 中选择关键码最大 (小) 的数据元素   2️⃣ 若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换   3️⃣ 在剩余的 array[i] - array[n-2] (array[i+1]–array[n-1]) 集合中,

DanceBit的博客 2万+

直接选择排序到堆排序做的那些改进

1 你会学到什么 2 讨论的问题是什么 3 相关的概念和理论 4 直接选择排序 基本思想 升序排序的例子 算法评价 5 直接选择的优化版之堆排序 自学成才的计算机科学家 Flody 堆排序的基本概念 堆排序的算法思想 堆排序是如何工作的 应用堆排序得到升序排序的例子 算法评价 6 总结 1 你会学到什么?彻底弄明白常用的排序算法的基本思想,算法的时间和空间复杂度,以及如何选择这些排序算法

相信相信的力量 3344

选择排序(选择排序,堆排序)

两种选择排序!

qq_52777887的博客 2197

排序算法上——插入,希尔,选择,堆排序

在希尔排序开始时增量较大,分组较多,每组的记录数目少,n小,此时直接插入最好和最坏时间复杂度n2差距很小,故各组内直接插入较快,后来增量di逐渐缩小,分组数逐渐减少,而各组的记录数目逐渐增多,但由于已经按di-1作为距离排过序,使文件较接近于有序状态,所以新的一趟排序过程也较快。2. 然而在排序的时候,时间消耗过于庞大,因为在挪动元素时,会把堆内的序列和关系打乱,因此应该建大堆,然后利用算法进行调整。1.希尔排序的核心在于对数组进行预排序,值得注意的是,预排序只是让数组相对有序,而非达到真正的有序状态。

2303_81060385的博客 1512

选择排序(简单选择排序和堆排序)

选择排序的基本思想是:每一趟(例如第i趟)在后面的 n-i+1 个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第 n-1 趟做完,待排序元素只剩下一个,就不用再选了。这里主要讲简单选择排序和堆排序(重点,面试中问到过) 一、简单选择排序         基本思想:假设排序表为 L[1....n] ,第i趟排序即从L[i,,,,n]  中选择关键字最小的元素与 L(i) 交...

一个小白的成长之路 2万+

【算法】选择排序——堆排序+直接选择排序

选择排序 上一篇总结了插入排序: 【算法】插入排序——希尔排序+直接插入排序_Rinne’s blog-优快云博客 这篇接着总结选择排序: 遍历一遍,每一次从待排序的数据元素中选出**最小(或最大)**的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 后面讲解都以顺序为例 文章目录选择排序一、直接选择排序二、堆排序三、测试性能 一、直接选择排序 按照之前说的遍历一遍只挑出最小然后放最前面,效率有些低 我们可以遍历的时候可以同时找出最大和最小,分别放在begin和end,再将 begin++

Rinne's blog 1281

选择排序之直接选择排序和堆排序

选择排序 基本思想:每一次从待排序的数据中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 直接选择排序 在元素集合array[i]--array[n-1]中选择关键码最大(小)的数据元素 若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换 在剩余的array[i]--array[n-2](array[i+1]-...

Damn_Yang的博客 952

堆排序、选择排序

堆排序其实也是一种选择排序,是一种树形选择排序。 只不过直接选择排序中,为了从R[1...n]中选择最大记录,需比较n-1次。 然后从R[1...n-2]中选择最大记录需比较n-2次...... 事实上这n-2次比较中有很多已经在前面的n-1次比较中已经做过。 而树形选择排序恰好利用树形的特点保存了部分前面的比较结果,因此可以减少比较次数。 对于n个关键字序列,最坏情况下每个节点需比较l...

mlm5678的博客 1062
上一篇: 二叉树遍历、查找和删除说明
下一篇: 二叉排序树(BST)的创建和删除
suixinghero
博客等级 码龄7年 10粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值