【数据结构】初识排序 直接插入排序

初识排序 & 直接插入排序

  • 🐟排序在现实中的应用
  • 🐟排序的概念
  • 🐟常见的排序算法
  • 🐟直接插入排序
    • 💦举例--直接插入排序在现实种的应用
    • 💦单趟直接插入排序讲解
    • 💦直接插入排序算法

🐟排序在现实中的应用

现实中的排序不出不在,比如说高校之间的比较,根据某一特定的指标进行排序;比如说,学生的成绩排名;比如说在网上进行购物时我们可以根据购物量或者好评率或者评论数等等进行排序。

🐟排序的概念

排序的概念:
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。
排序的分类:
排序又分为内部排序外部排序
内排序: 数据元素全部放在内存中的排序。
外排序: 数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。

🐟常见的排序算法

🐟直接插入排序

💦举例–直接插入排序在现实种的应用


我们在玩扑克牌时,就利用了直接插入排序的思想, 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。
排序的思想结合这个扑克牌的例子,插入排序,简单理解,就是,对于原来一个已经排好序的有序数组,然后逐个插入,插入一个,排一次序,使得这个新插入的数被放在一个合适的位置,再次插入后的使得新的数组是有序的,再插入一个,则再次排序…依次循环,直至插入停止。

💦单趟直接插入排序讲解

首先,我们一定要明白和理解单趟排序,即对于一个有序的数组插入一个数。
给定一个有序数组,将要插入的数放在有序数组的最后,例如:

然后我们进行插入排序:
首先设置end,使得指针指向原有数组的最后一个位置,然后将我们要插入的数6和end所指的数9进行比较。

6<9,则需要将9其后的位置赋值为9,同时将end向前移动。

然后我们紧接着,让我们要插入的元素即6和end所指的当前的元素7进行比较。
6<7,则我们将7后面的位置赋值为7,(也就将原来的9覆盖掉了),然后end–,使得end指向前一个元素。

接着,我们让我们要插入的元素和end当前所指的元素进行比较。
6>5,即我们要插入的元素6大于end当前所指的元素5,这时,循环停止,我们将我们要插入的元素6插入到end当前所指元素即5的下一个位置即可。这样,我们的一趟插入排序就完成了。

💦直接插入排序算法

下面程序是单趟循环,[0,end]有序,把end+1位置的元素插入前序序列,使得控制最后[0,end+1]有序。

void InsertSort1(int* a,int n)
{int end=n-1;//将要插入的元素定义为放在原数组的最后一个元素int tmp=a[end+1];//用变量tmp来保存新插入的元素,防止被覆盖掉while(end>=0) //与新插入的元素相进行比较的元素,下标一定≥0    {if(tmp<a[end]){//挪动 (也就是赋值)a[end+1]=a[end];}else //大于等于 则插入到end的后面一个空{break; //插入完成,退出循环}end--;//更新end 使得循环继续}a[end+1]=tmp;
}

单趟变整体,已经排好序的数组中最开始只有一个元素,即a[0],然后插入第二个元素a[1],进行排序,然后插入第三个元素a[3]进行排序…直到插入最后一个元素a[n-1]进行排序。
则算法:

void InsertSort(int*a,int n)
{int i;for(i=1;i<n;i++){int end=i-1;int tmp=a[i];while(end>=0){if(tmp<a[end]){a[end+1]=a[end];}else{break;}end--;}a[end+1]=tmp;}
}

我们放在主函数进行测试运行:

int main()
{int a[5] = { 1,10,20,4,8 };InsertSort(a, 5);int i;for (i = 0; i < 5; i++){printf("%d ", a[i]);}return 0;
}

运行结果如下:

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

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

相关文章

【android开发-11】android中创建自定义布局并引入自定义布局的参考例子

1&#xff0c;以下是在Android中创建自定义布局并引入自定义布局的参考例子&#xff1a; 首先&#xff0c;创建一个自定义布局文件。在项目的res/layout目录下创建一个新的XML文件&#xff0c;例如custom_layout.xml。在该文件中&#xff0c;您可以定义自定义的视图元素和布局…

应用于智慧零售的AI边缘计算盒子+AI算法软硬一体化方案

中国是世界上最大的消费市场&#xff0c;零售行业拥有极大的发展潜力&#xff0c;阿里、腾讯两大互联网巨头正在加紧、加大布局&#xff1b; 信迈智慧零售方案可涵盖快消行业、服饰行业、餐饮行业、酒店行业、美家行业、消费电子行业、新零售商行业、服饰连锁、大卖场/商超、百…

fastmock如何判断头信息headers中的属性值

fastmock可以快速提供后端接口的ajax服务。 那么&#xff0c;如何判断头信息headers中的属性值呢&#xff1f; 可以通过function中的参数_req可以获得headers中的属性值&#xff0c;比如 User-Agent&#xff0c;由于User-Agent属性带有特殊符号&#xff0c;因此使用[]方式而不…

生成式 AI 与数据融合:亚马逊云科技的前沿探索与应用

目录 前言1 生成式AI和数据2 亚马逊云科技的AI创新2.1 数据与生成式 AI 的协同创新2.2 多模态融合与创新驱动2.3 构建创新平台与工作智能助手2.4 数据整合与安全保障 3 生成式AI结合企业数据的典型技术Amazon Q4 展望未来 授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技…

经典神经网络——ResNet模型论文详解及代码复现

论文地址&#xff1a;Deep Residual Learning for Image Recognition (thecvf.com) PyTorch官方代码实现&#xff1a;vision/torchvision/models/resnet.py at main pytorch/vision (github.com) B站讲解&#xff1a; 【精读AI论文】ResNet深度残差网络_哔哩哔哩_bilibili …

NXP iMX8M Plus Qt5 双屏显示

By Toradex胡珊逢 简介 双屏显示在显示设备中有着广泛的应用&#xff0c;可以面向不同群体展示特定内容。文章接下来将使用 Verdin iMX8M Plus 的 Arm 计算机模块演示如何方便地在 Toradex 的 Linux BSP 上实现在两个屏幕上显示独立的 Qt 应用。 硬件介绍 Verdin iMX8M Plu…

Ubuntu18.04安装LVI-SAM保姆级教程

目录 1 LIO-SAM的安装前要求 1.1 ROS安装:参考我的另一篇博客 1.2 gtsam安装(参考LeGO-LOAM 1.2节) 2 安装

C++的explicit和隐式转换

隐式转换是指在某些情况下&#xff0c;编译器会自动进行类型转换&#xff0c;将一种类型的值转换为另一种类型&#xff0c;以满足表达式的要求。这种转换是隐式进行的&#xff0c;不需要显式地调用转换函数或构造函数。 int a 5; double b a; // int 到 double 的隐式转换上…

Doris 数据导入二:Stream Load 方式

Stream load 是一个同步的导入方式,用户通过发送 HTTP 协议发送请求将本地文件或数据流导入到 Doris 中。Stream load 同步执行导入并返回导入结果。用户可直接通过请求的返回体判断本次导入是否成功。 1 适用场景 Stream load 主要适用于导入本地文件,或通过程序导入数据流中…

深入理解Java对象

1. 对象一定分配在堆上吗&#xff1f; 在Java中&#xff0c;对象的分配通常发生在堆&#xff08;Heap&#xff09;上&#xff0c;这是Java内存管理的一部分。然而&#xff0c;这个说法需要一些细化和额外的说明&#xff1a; 对象通常分配在堆上 堆内存&#xff1a;在Java中&…

支持Upsert、Kafka Connector、集成Airbyte,Milvus助力高效数据流处理

Milvus 已支持 Upsert、 Kafka Connector、Airbyte&#xff01; 在上周的文章中《登陆 Azure、发布新版本……Zilliz 昨夜今晨发生了什么&#xff1f;》&#xff0c;我们已经透露过 Milvus&#xff08;Zilliz Cloud&#xff09;为提高数据流处理效率&#xff0c; 先后支持了 Up…

【Redis】Redis高并发高可用(主从复制、哨兵机制)

Redis高并发高可用 复制 在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis 副本。复制功能是高可用Redis的基础,后面章节的哨兵和集群都是在复制…

java类库的废弃API

java语言一直在进化&#xff0c;java类库也越来越庞大&#xff0c;给人的感觉是一直在做加法。 有没有做减法呢&#xff1f;当然也有&#xff0c;一些是设计失误需要撤回的&#xff0c;如可能引起线程安全问题的Thread.stop()等方法&#xff1b;还有是随着时代发展而被淘汰的&…

GameNetController网络控制器

好用的局域网内的网络控制器&#xff0c;稍作更改可连接互联网 using System; using System.Collections; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using LitJson; using UnityEngine; u…

【数据结构】拆分详解 - 堆的应用

堆的应用 1. 堆排序 思路&#xff1a; 建大堆 向下调整建堆&#xff0c;根位置即选出的最大数 排序&#xff1a;交换头尾&#xff0c;向下调整&#xff0c;尾删 把大数移到尾部&#xff0c;调整堆&#xff0c;将排好的大数“删出”堆注意向下调整和尾删顺序不能对调&#xff0c…

cocos 关于多个摄像机,动态添加节点的显示问题,需要动态修改layer。(跟随摄像机滚动)(神坑官网也不说明一下)

参考文章&#xff1a;Cocos 3.x 层级Layer - 简书 2D镜头跟随应该怎么实现呢 - Creator 3.x - Cocos中文社区 关于多个摄像机&#xff0c;动态添加节点的显示问题&#xff0c;需要动态修改layer&#xff1f; 场景&#xff1a;在制作摄像机跟随角色移动功能时&#xff0c;新增…

Python 3 使用 read()、readline()、readlines() 函数 读取文件

1 样例文件 example.txt 春晓 孟浩然〔唐代〕 春眠不觉晓&#xff0c;处处闻啼鸟。 夜来风雨声&#xff0c;花落知多少。 2 分别使用 read()、readline()、readlines() 函数 2.1 # read() -------- 一次性读取所有文本&#xff0c;以字符串的形式返回结果。 # read() ----…

1.qml-3D入门讲解介绍

本章我们来学习QML 3D教程&#xff0c;QML 3D能够支持windows linux等多平台跨平台并且显示效果大部分一致&#xff0c;非常方便&#xff0c;学习的qt版本最低为qt6.5。 要使用qml 3D类&#xff0c;需要导入QtQuick3D模块。 这是使用空间渲染器和场景图的 QML 前端。目前&…

SQL Server 2016(分离和附加数据库)

1、实验环境。 基于上一个实验《SQL Server&#xff08;创建数据库&#xff09;》 2、需求描述。 class数据库的数据文件和事务日志文件都位于C:\db_class目录下。现在需要把class数据库的数据文件和事务日志文件分开存放&#xff0c;数据文件class.mdf存放于原位置&#xff0…

网传滴滴系统崩了,是因为k8s版本升级错误?

11月27日晚间&#xff0c;滴滴因系统故障导致App服务异常登上热搜&#xff0c;不仅无法显示定位、无法打车&#xff0c;有司机的后台还显示收入超690亿。28日和29日&#xff0c;滴滴两次发文致歉&#xff0c;称初步确定事故起因是底层系统软件发生故障。 相较于一些网友戏谑的…