数据结构与算法基础(王卓)(28):排序概述(分类)、直接插入排序思路

这篇具有很好参考价值的文章主要介绍了数据结构与算法基础(王卓)(28):排序概述(分类)、直接插入排序思路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

排序分类:(本章目录)

按数据存储介质:(学习内容)

内部排序:

外部排序:

按比较器个数:(学习内容)

串行排序:

并行排序:

按主要操作:(学习内容、里面的排序都会重点学)

比较排序:

基数排序:

按辅助空间:

原地排序:

非原地排序:

按稳定性:

稳定排序:

 非稳定排序:

按自然性:

插入排序

前置条件:

1. 直接插入排序

思绪脉络如下:


排序分类:(本章目录)


按数据存储介质:(学习内容)

内部排序:

数据量不大、数据在内存,无需内外存交换数据

外部排序:

数据量较大、数据在外存(文件排序)

外存排序时,要将数据分批调入内存来排序,中间结果还要及时放入外存,比较复杂

数据在内存当中放不下:

在内存当中排序一部分,排序完了以后把这些数据放进外存

在从外存当中再拿来一部分,在来进行(新一轮的)排序


按比较器个数:(学习内容)

串行排序:

单处理机(同一时刻比较一对元素)

并行排序:

多处理机(同一时刻比较多对元素)


按主要操作:(学习内容、里面的排序都会重点学)

比较排序:

插入排序、交换排序、选择排序、归并排序

基数排序:

不比较元素大小,仅根据元素本身的取值确定其有序位置


按辅助空间:

原地排序:

辅助空间用量为O(1),与参加排序的数据量大小无关

非原地排序:

辅助空间用量超过O(1),与参加排序的数据量大小有关


按稳定性:

稳定排序:

能使任何数值相等的元素,排序后相对次序不变

 非稳定排序:

数值相等的元素,排序后相对次序变化

数据结构与算法基础(王卓)(28):排序概述(分类)、直接插入排序思路


按自然性:

自然排序:

输入数据越有序,排序的速度越快

非自然排序:

输入数据越有序,排序的速度越慢


插入排序


前置条件:

存储结构:以顺序表存储

#include<iostream>
using namespace std;

#define MAXSIZE 20  //记录最大个数
typedef int KeyType;  //关键字类型

typedef int InfoType;

//定义每个记录(数据元素)的结构
struct RecType
    //Record Type:每条记录的类型
{
    KeyType key;  //关键字
    InfoType otherinfo;  //其他数据项
};

struct SqList 
    //顺序表(的)结构
{
    RecType r[MAXSIZE + 1]; 
    //类型为【记录类型】的数组
    //r[0]一般做哨兵或缓冲区
    int length;  //顺序表长度
};

int main()
{

}

1. 直接插入排序

根据PPT,整理出

思绪脉络如下:

数据结构与算法基础(王卓)(28):排序概述(分类)、直接插入排序思路

当然了,这里的“16”其实也只是一个虚指,他指向(代表)我们所有用来和7对比的数字(对象) 


根据PPT第23页所示意的,显然:

字母 i 用来表示的,是:每次循环之前有序表(顺序表)的队尾(序列尾部)

用字母 j 来表示(完成)“插入”的一整个流程/操作

再(又)根据PPT第27所提醒的,以及基于我们前面查找算法的前车之鉴:

我们这里需要使用哨兵


最终整理出程序的基本框架如下:

补充:加哨兵

对于诸多要插入的元素:
设立:

指针 i 指向顺序/有序序列队尾;
指针 j 指向新元素:

注:

原来设计的算法没有考虑到我们可以使用哨兵的便利性;
现在,我们已经不需要特别设立一个指针指向新插入的元素,只需要把新插入的元素放到哨兵里即可

那么现在,我们就确定了:

  • 把要新插入的元素放到哨兵(位序为0的位置)里
  •  j 指向我们在有序序列里的、拿来和新插入的元素比较的元素(的位置)
  • 比较哨兵(位序为0的)元素和指针 j 指向的元素
  1. 若大于等于:(哨兵元素大于等于指针 j 指向的元素)
    【交换元素】

    把所有 j 及 j 之后有序序列的元素全部往后移动一位

    (因为要插入的新元素已经放在哨兵里面了,我们不用担心后退一位会不会有数据丢失的影响)

    把哨兵元素插入到指针 j指向的位置

    注意:不要忘了(i++)!!!
     

  2. 若小于:(哨兵元素小于指针 j 指向的元素)
    【继续比较,和前面一位比较】

    j--;

  3. i++文章来源地址https://www.toymoban.com/news/detail-426267.html

到了这里,关于数据结构与算法基础(王卓)(28):排序概述(分类)、直接插入排序思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第一百零六天学习记录:数据结构与算法基础:单链表(王卓教学视频)

    结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻 线性表的链式表示又称为非顺序映像或链式映像。 用一组物理位置任意的存储单元来存放线性表的数据元素。 这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意

    2024年02月16日
    浏览(42)
  • 第一百二十八天学习记录:数据结构与算法基础:栈和队列(上)(王卓教学视频)

    1、栈和队列是两种常用的、重要的数据结构 2、栈和队列是限定插入和删除只能在表的“端点”进行的线性表 线性表可以在任意一个位置插入和删除,栈只能在最后位置插入和删除 只能删除第一个元素 栈和队列是线性表的子集(是插入和删除位置受限的线性表)

    2024年02月13日
    浏览(35)
  • 数据结构和算法——快速排序(算法概述、选主元、子集划分、小规模数据的处理、算法实现)

    目录 算法概述 图示 伪代码 选主元 子集划分 小规模数据的处理 算法实现 快速排序和归并排序有一些相似,都是用到了分而治之的思想:   通过初步的认识,我们能够知道快速排序算法最好的情况应该是: 每次都正好中分 ,即每次选主元都为元素的中位数的位置。 最好情

    2024年02月15日
    浏览(31)
  • 数据结构基础之排序算法

    在数据结构中,常见的排序算法有以下几种: 冒泡排序(Bubble Sort):通过比较相邻元素并交换它们的位置,每轮将最大(或最小)的元素冒泡到末尾,重复执行直到排序完成。 特点:简单易懂,但对于大型数据集效率较低。 时间复杂度: 最优情况:O(n)(当数组已经排序好

    2024年02月15日
    浏览(29)
  • 《数据结构与算法》之十大基础排序算法

    冒泡排序是一种交换排序,它的思路就是在待排序的数据中,两两比较相邻元素的大小,看是否满足大小顺序的要求,如果满足则不动,如果不满足则让它们互换。 然后继续与下一个相邻元素的比较,一直到一次遍历完成。一次遍历的过程就被成为一次冒泡,一次冒泡的结束

    2024年02月05日
    浏览(85)
  • C++基础-介绍·数据结构·排序·算法

    C++是一门风格严谨又不失自由的开发语言,提供了完整的内存管理、支持函数式编程和面向对象编程,支持模板、多继承、多实现、重载、重写等多态特性。 优势在于目前90%的操作系统、数据库、应用基础架构、硬件嵌入式等都是使用C/C++制作的,而C++是对C的标准扩展,掌握

    2024年02月03日
    浏览(33)
  • 青岛大学_王卓老师【数据结构与算法】Week05_11_栈与递归_学习笔记

    本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–第05周11–3.4栈和递归 递归的定义

    2024年02月16日
    浏览(36)
  • 青岛大学_王卓老师【数据结构与算法】Week05_06_栈的顺序表示_学习笔记

    本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–第05周06–3.3栈的表示和实现2–3.

    2024年02月16日
    浏览(44)
  • 青岛大学_王卓老师【数据结构与算法】Week04_04_双向链表的插入_学习笔记

    本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–第04周04–2.5.4双向链表2–双向链表

    2024年02月12日
    浏览(46)
  • 青岛大学_王卓老师【数据结构与算法】Week05_08_顺序栈的操作2_学习笔记

    本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–第05周08–3.3栈的表示和实现4–3.

    2024年02月16日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包