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

初识排序 & 直接插入排序

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

🐟排序在现实中的应用

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

🐟排序的概念

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

🐟常见的排序算法

🐟直接插入排序

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


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

💦单趟直接插入排序讲解

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

然后我们进行插入排序:
首先设置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.mfbz.cn/a/208428.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

快金数据获评2023德勤深圳高科技高成长20强

近日&#xff0c;由德勤中国与深圳市商业联合会共同主办的“2023德勤深圳高科技高成长20强”榜单评选揭晓活动与颁奖盛典在深圳市南山区隆重举行。快金数据作为运力数据生态及运力场景解决方案领域的建设者与引领者&#xff0c;凭借多年企业级物流综合数字化技术创新与持续高质…

Nacos作为配置中心的一些知识二

11292327 问&#xff1a;客户端发请求给Nacos服务端&#xff0c;服务端这边会进行哪些处理&#xff1f; 答&#xff1a;客户端发请求给Nacos 服务端 &#xff0c;服务端这边通过ConfigController类的309行的listener方法&#xff0c;进行处理 第一步 获取客户端请求的文件的…

rust中动态数组Vec的简单使用

在Rust中&#xff0c;Vector&#xff08;简称Vec&#xff09;是一个动态数组数据结构&#xff0c;它可以动态地增加或减少其容量。Vec是Rust标准库中的一个常见类型&#xff0c;非常适合用于存储和操作一系列相同类型的值。 Vec其实是一个智能指针&#xff0c;用于在堆上分配内…

oracle FUNCTION(任意两个时间 之间的工作小时)

写函数计算 任意两个时间 之间的工作小时 每天工作时间&#xff08;8:00 - 20:00 共12小时&#xff09;&#xff0c;没有休息日 CREATE OR REPLACE FUNCTION SC_YD_DESI.CALCULATE_WORK_HOURS_FUNC (p_current_time IN DATE,p_order_time IN DATE ) RETURN NUMBER ASp_work_hou…

OPCUA:打造高效智能工厂的利器

传统工业生产模式中的核心要素之一即是人&#xff0c;通过人的工作和劳动实现商品的产生&#xff0c;在这个过程中&#xff0c;人作为关键生产要素&#xff0c;其在生产环节中的覆盖面不仅包括了传统的狭义的重复性生产过程&#xff0c;更是涵盖有包括记录、预警、沟通和组织等…

[数据结构]深入浅出讲解二叉树-平衡二叉树-左右旋转

树是一种数据结构&#xff0c;单位为Node(节点)。不同于链表的直线排列&#xff0c;树呈现一种自上而下的分层排序规则。 树->数据结构&#xff1a; 单元为Node(节点)->当这样的节点多了 就可以关联出不同的形态 一个父节点有一个左子节点&#xff0c;有…

windows 如何卸载证书

1、windows r 2、输入 certmgr.msc 3、进入证书管理&#xff0c;选择个人 4、选择个人---找到要删除的证书&#xff0c;删除 就可以了。

每日一练:“五人分鱼”问题

1. 题目 五人分鱼问题&#xff1a;A、B、C、D、E 五人在某天夜里合伙去捕鱼&#xff0c;到第二天凌晨时都疲惫不堪&#xff0c;于是各自找地方睡觉。   日上三杆&#xff0c;A 第一个醒来&#xff0c;他将鱼分为五份&#xff0c;把多余的一条鱼扔掉&#xff0c;拿走自己的一份…

LeetCode Hot100 31.下一个排列

题目&#xff1a; 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列…

软件测试-软件缺陷有哪些,一文贯彻到底

软件缺陷 软件缺陷&#xff1a;又称之为“Bug”。即计算机软件或程序中存在的某种破坏正常运行能力的问题、错误&#xff0c;或者隐藏的功能缺陷。 表现形式A 软件没有实现产品规格说明书所要求的功能模块。 表现形式B 软件中出现了产品规格说明指明不应该出现的错误。 表现…

WordPress:解决xmlrpc.php被扫描爆破的风险

使用WordPress的朋友都知道&#xff0c;一些【垃圾渣渣】会利用xmlrpc.php文件来进行攻击&#xff0c;绕过WP后台错误登录次数限制进行爆破。虽然密码复杂的极难爆破&#xff0c;但及其占用服务器资源。 方法一、利用宝塔防火墙&#xff08;收费版&#xff09; 一般可以直接使…

代码随想录算法训练营第五十二天【动态规划part13】 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

300.最长递增子序列 题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 求解思路 动规五部曲 1.dp数组及其下标定义&#xff1a; dp[i]表示包括i以前的以nums[i]结尾的最长递增子序列的长度 2.状态转移方程&#xff1a; 位置i的最长升序…

如何解决SSL证书部署后未生效或网站显示不安全

本文介绍SSL证书部署后未生效或网站显示不安全的排查方法。 浏览器提示“您与此网站建立的连接不安全” 浏览器提示“无法访问此页面” 浏览器提示“这可能是因为站点使用过期或者不全的TLS安全设置” 浏览器提示“此页面上部分内容不安全&#xff08;例如图像&#xff09;”…

网络类型解析(基础):探索通信世界的多样面貌

在当今数字化时代&#xff0c;网络已经成为人们生活和工作中不可或缺的一部分。从个人设备之间的直接通信到全球范围的数据传输&#xff0c;不同类型的网络为我们提供了多种连接方式和通信选择。透过对这些网络类型的解析&#xff0c;我们将更好地理解它们的特点、优势和适用场…

Excel导入操作

<template><el-dialogwidth"500px"title"员工导入":visible"showExcelDialog"close"$emit(update:showExcelDialog, false)"><el-row type"flex" justify"center"><div class"upload-e…

C++stack

目录 1.什么是stack 2.容器适配器 3.stack的使用 top push pop 4.模拟实现stack 1.什么是stack 1. stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行 元素的插入与提取操作。(后进先出) 2. stack是作为容…

git的版本控制流程

1、git是一款版本控制工具 例如我们常用的淘宝&#xff0c;每次升级&#xff0c;版本号就会加一。那么我们怎么控制版本号呢&#xff1f; --使用git。 2、最常使用的git指令 git add . 暂存 git commit -m"***" 提交到本地 git pull 将远程仓库代码下拉到本地 git …

Python知识碎片补充【侯小啾python领航班系列(十四)】

Python知识碎片补充【侯小啾python领航班系列(十四)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

c#学习相关系列之as和is的相关用法

一、子类和父类的关系 public class Program{static void Main(string[] args){Animal animal new Dog();// Dog dog (Dog)new Animal(); 编译成功&#xff0c;运行报错Dog dog (Dog)animal;Dog dog new Dog();Animal animal dog; //等价于Animal animal new Dog();}}pub…

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

据统计&#xff0c;全国大约有45W个小区&#xff0c;监控高空抛物、治理乱扔垃圾、人员管理、烟火检测、占道、人流量检测、车型检测等&#xff1b;营造社区安全等需求跟每一个参与者息息相关&#xff0c;据法院公开资料显示&#xff0c;每年有1000宗以上跟高空抛物有关的各类案…
最新文章