8.4 数据结构——选择排序

news2025/3/1 11:29:11

8.4.1 简单选择排序

基本思想:在待排序的数据中选出最大(小)的元素放在其开始的位置。

基本操作:

(1)首先通过n-1次关键字比较,从n个记录中找出关键字最小的记录,将它与第一个交换;

(2)再通过n-2次比较,从剩余的n-1个记录中找出关键字次小的记录,将它与第二个交换;

(3)重复上述操作,共进行n-1趟排序后,排序结束。

简单选择排序算法:

void Select_Sort(SQList *L)
{
    int k;
    for (int i = 1; i < L->length; i++)
    {
        k = i;
        for (int j = i+1; j <= L->length; j++)
        {
            if (L->r[j].key < L->r[k].key)
            {
                k = j;
            }
        }
        if (k != i)
        {
            RedType tmp = L->r[i];
            L->r[i] = L->r[k];
            L->r[k] = tmp;
        }
    }
}

8.4.2 堆排序

堆的定义:若n个元素的序列{a1,a2,...,an}满足:

则分别称该序列{a1,a2,...,an} 为小根堆和大根堆。

从堆的定义可以看出:堆使之是满足如下性质的完全二叉树:二叉树中任一非叶子结点均小于(大于)它的孩子结点。

堆排序:若在输出堆顶的最小值(最大值)后,使得剩余n-1个元素的序列重新建立一个堆,则得到n个元素的次小值(次大值)……如此重复,使能得到一个有序序列,这个过程称之为堆排序。

堆的调整:

如何在输出堆顶元素后,调整剩余元素成为新的堆?

(1)输出堆顶元素后,以堆中最后一个元素代替之;

(2)然后将根结点值与左、右子树的根结点进行比较,并与其中最小值进行交换;

(3)重复上述操作,直至叶子结点,将得到新的堆,成这个从堆顶至叶子的调整过程称为“筛选”。

如何建立堆?

例:{49,38,65,97,76,13,27,49} 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/38875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytorch 中Label Smoothing CrossEntropyLoss实现

一. 前言 一般情况下我们都是直接调用Pytorch自带的交叉熵损失函数计算loss&#xff0c;但涉及到魔改以及优化时&#xff0c;我们需要自己动手实现loss function&#xff0c;在这个过程中如果能对交叉熵损失的代码实现有一定的了解会帮助我们写出更优美的代码。 其次是标签平…

Day13--自定义组件-封装自定义属性和click事件

提出问题&#xff1a; 当前我们search搜索框的背景颜色和圆角边框都是写死的&#xff0c;使用者没有办法修改器背景颜色和圆角尺寸。那么为了让这个组件更加通用性强一些。 ***********************************************************************************************…

用DIV+CSS技术设计的个人电影网站(web前端网页制作课作业)

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

框架体系——Spring

Spring IOC IOC控制反转 IOC 控制反转&#xff0c;全称Inverse of Control&#xff0c;是一种设计理念由代理人来创建和管理对象&#xff0c;消费者通过代理人来获取对象Ioc的目的是降低对象之间的耦合通过加入Ioc容器将对象统一管理&#xff0c;将对象关联变为弱耦合。 DI…

MyBatis中有哪些注解呢?

转自: MyBatis中有哪些注解呢&#xff1f; 为了简化 XML 的配置&#xff0c;MyBatis 提供了注解。我们可以通过 MyBatis 的 jar 包查看注解&#xff0c;如下图所示。 以上注解主要分为三大类&#xff0c;即 SQL 语句映射、结果集映射和关系映射 下面分别进行讲解 一、SQL 语句…

Allegro中如何进行尺寸标注

摘要本文介绍了如何在Allegro中进行尺寸标注&#xff0c;包含各种标注样式的区别、如何设置参数、如何显示单位、如何导出带尺寸的PDF与DXF等信息。 一. 为什么要尺寸标注PCB尺寸标注的作用&#xff1a; 方便设计人员明确板子的大小&#xff0c;以及安装位置的各种细节&#xf…

react学习笔记3--数据双向绑定,组件通信

一、表单处理 1、受控组件-input元素 通过设置input元素的value值&#xff08;或复选框的checked值&#xff09;实现Getter&#xff0c;通过监听onChange事件实现Setter&#xff0c;从而实现数据双向绑定。 class element extends React.Component {state {txt:""…

vulhub靶场搭建与使用

vulhub靶场搭建与使用1.前言2.配置yum源2.1备份原来的源文件2.2 配置阿里源2.3重置yum源2.4更新yum源3.安装docket3.1安装docket3.2启动docket3.3设置国内镜像源3.4重启docket4.安装docker-compose4.1安装dockers-compose4.2提升权限5.安装vulhub5.1安装git5.2下载vulhub5.3下载…

自知识蒸馏(知识蒸馏二)

自知识蒸馏&#xff08;知识蒸馏二&#xff09;自知识蒸馏&#xff08;知识蒸馏二&#xff09;Born-Again Neural Networks&#xff08;ICML2018&#xff09;方法为什么有效实验结果Training Deep Neural Networks in Generations: A More Tolerant Teacher Educates Better St…

MyBatis工作原理

MyBatis工作流程&#xff1a; 具体介绍&#xff1a; (1) MyBatis 读取核心配置文件mybatis-config.xml mybatis-config.xml核心配置文件主要配置了MyBatis的运行环境等信息。 (2)加载映射文件Mapper.xml Mapexm文件即SQL映射文件&#xff0c;该文件配置了操作数据库的SOL语句&a…

Python+Appium移动端自动化测试框架实现

一、Appium 概述 1、Appium 简介 Appium是一个开源的自动化测试框架,可以用来测试基于iOS、Android和Firefox OS 平台的原生与混合的应用。 该框架使用Selenium WebDriver,在执行测试时用于和Selenium Server 通信的是JSON Wire Protocol。在Selenium 2中,Appium将取代 i…

【CNN】经典网络LeNet——最早发布的卷积神经网络之一

前言 LeNet是Yann LeCun于1988年提出的用于数字识别的网络结构&#xff0c;可以说LeNet是深度CNN网络的基石&#xff0c;AlexNet、VGG、GoogLeNet、ResNet等都是在VGG基础上加入各类激活函数或加深网络演变而来的&#xff0c;所以理解LeNet对于现在主流CNN深度学习架构的理解有…

制作一个简单HTML电影网页设计(HTML+CSS)

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

基于蚁群算法的多配送中心的车辆调度问题的研究(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

【图像处理】小波编码图像中伪影和纹理的检测附Matlab代码和报告

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

如果各位同学还对时间复杂度有疑问?看这一篇就可以啦!

&#x1f387;&#x1f387;&#x1f387;作者&#xff1a; 小鱼不会骑车 &#x1f386;&#x1f386;&#x1f386;专栏&#xff1a; 《java练级之旅》 &#x1f393;&#x1f393;&#x1f393;个人简介&#xff1a; 一名专科大一在读的小比特&#xff0c;努力学习编程是我…

chrome浏览器一键切换搜索引擎,一键切换谷歌和百度搜索

chrome浏览器一键切换搜索引擎&#xff0c;一键切换谷歌和百度搜索 背景 有么有办法在谷歌和百度之间&#xff08;或其他引擎或非引擎&#xff0c;如Youtube、B站、Bing等&#xff09;之间切换。我们当然是不想重新输入keyword&#xff0c;甚至点击浏览器插件的图标后再选择引…

Scala010--Scala中的常用集合函数及操作Ⅰ

之前我们已经知道了Scala中的数据结果有哪些&#xff0c;并且能够使用for循环取到该数据中的元素&#xff0c;现在我们再进一步的去了解更加方便及常用的函数操作&#xff0c;使得我们能够对集合更好的利用。 目录 一&#xff0c;foreach函数 1&#xff0c;遍历一维数组 1&…

Pytorch中CrossEntropyLoss()详解

一、损失函数 nn.CrossEntropyLoss() 交叉熵损失函数 nn.CrossEntropyLoss() &#xff0c;结合了 nn.LogSoftmax() 和 nn.NLLLoss() 两个函数。 它在做分类&#xff08;具体几类&#xff09;训练的时候是非常有用的。 二. 什么是交叉熵 交叉熵主要是用来判定实际的输出与期望…

HTML CSS个人网页设计与实现——人物介绍丁真(学生个人网站作业设计)

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…