本次笔记内容:
10.2.1 算法概述
10.2.2 物理排序

文章目录

  • 表排序情况
  • 表排序算法概述
  • 物理排序
  • 复杂度分析

表排序情况

待排元素不是一个简单的整数,而是一个庞大的结构体,因此移动元素的时间不能忽略不计

表排序算法概述

间接排序:定义一个指针数组作为“表”(table)。

如上图,只需要定一个table,进行相关排序即可;无需移动元素位置。

物理排序

如上图,N个数字的排列由若干个独立的环组成。

即:

  • A[0]对应table[3],A[3]对应table[1],A[1]对应table[5],A[5]对应table[0],这是一个环。
  • 有了独立的环,针对每个环进行移动操作则减少移动次数(避免无效的移动)。
  • 首先将A[0]存在Temp,之后将A[3]移至[0],则此时[3]处空出,将A[1]移至[3],以此类推。

应该如何判断一个环结束呢?

  • if(table[i] == i) break;
  • 每当放好一本书时,就把其所放位置table[i]设为i。

复杂度分析

最好情况:初始即有序;
最坏情况:

  • 有⌊N/2⌋\lfloor N/2 \rfloor⌊N/2⌋个环,每个环包含2个元素;
  • 需要⌊3N/2⌋\lfloor 3N / 2 \rfloor⌊3N/2⌋此元素移动。
  • 则T=O(mN)T=O(mN)T=O(mN),m是每个A元素的复制时间。

【数据结构笔记37】表排序与物理排序相关推荐

  1. 数据结构笔记(三十五)--排序概念

    排序概念 排序算法,还分为内部排序算法和外部排序算法,之间的区别是,前者在内存中完成排序,而后者则需要借助外部存储器. 排序算法有: 1. 插入排序算法 2. 折半插入排序算法 3. 2路插入排序算法 ...

  2. 数据结构笔记--线性表定义与实现(Swift)

    数据结构笔记系列 数据结构笔记-两个有序链表合并成一个有序链表 线性表   线性表是最常用且最简单的一种数据结构,简言之,一个线性表是 n 个数据元素的有序序列. 特点 只有一个首结点和尾结点: 除首 ...

  3. 二、考研数据结构笔记——绪论(理解数据结构,算法,时间复杂度计算做题技巧)

    一.数据结构基本概念 1.数据:数据是信息的载体.客观事物的一种表现形式.万事万物都能用数据表示出来. 2.数据元素:数据元素是数据的基本单位,一个数据元素有若干个数据项组成 3.数据项:构成数据元素 ...

  4. 一、考研数据结构笔记——引言及目录

    一.关于我理解的数据结构 1. 引言 本人自2021年3月准备考研,考研主要是为了提升学历,本科院校不是理想.迫切需要提高学历. 写这刊博客,主要是总结我考研路上对数据结构的一些理解,以及为了方便我后 ...

  5. [课程复习] 数据结构之线性表、树、图、查找、排序经典算法复习

    作者最近在复习考博,乘此机会分享一些计算机科学与技术.软件工程等相关专业课程考题,一方面分享给考研.考博.找工作的博友,另一方面也是自己今后完成这些课程的复习资料,同时也是在线笔记.基础知识,希望对您 ...

  6. 数据结构笔记(王道考研) 第八章:排序

    大部分内容基于中国大学MOOC的2021考研数据结构课程所做的笔记,该课属于付费课程(不过盗版网盘资源也不难找...).后续又根据23年考研的大纲对内容做了一些调整,将二叉排序树和平衡二叉树的内容挪到 ...

  7. 堆排序 C++代码实现及思想 排序过程输出 恋上数据结构笔记

    复习梗概 文章目录 复习梗概 什么是堆思想? 堆排序算法怎么来的? 什么是下滤?代码 什么是建堆?代码 堆排序本体 代码及排序过程输出 和时间复杂度 完整代码 什么是堆思想? 最大堆:树形结构,每一个 ...

  8. 02_Python算法+数据结构笔记-冒泡排序-选择排序-插入排序-快排-二叉树

    b站视频:路飞IT学城 清华计算机博士带你学习Python算法+数据结构_哔哩哔哩_bilibili 文章目录 #11 排序介绍 #12 冒泡排序介绍 #13 冒泡排序 #14 选择排序 #15 插入 ...

  9. 数据结构笔记:选择排序

    原文地址添加链接描述 分类目录--数据结构笔记 每一步在未排序部分去比较当前标记的最小值(初始化为第1个)与当前值的大小,更新(或不跟新)最小值的索引,维护的是一个最小值的索引 每一轮找一个最小值,替 ...

最新文章

  1. LCA 在线倍增法 求最近公共祖先
  2. jupyter中中文显示不正常_jupyter 中文乱码设置编码格式 避免控制台输出的解决...
  3. 《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)
  4. Android4.0 以后不允许在主线程进行网络连接
  5. javaone_JavaOne 2012:向上,向上和向外:使用Akka扩展软件
  6. 开发中常用的加密算法大全初步总结
  7. 解决Git无法同步空文件夹的问题
  8. 自学TP5源码(一)
  9. canvas+js画时钟
  10. spss导入Excel显示连接服务器超时,Excel里的日期在spss里怎么不正常显示
  11. 用计算机将复数转换成角度,计算机复数计算
  12. CF1427F-Boring Card Game【贪心】
  13. PDF写出:使用fop输出为pdf格式文件的Demo
  14. psCS6图片文件无法直接拖入的解决方法
  15. Py之shap:shap库的简介、安装、使用方法之详细攻略
  16. 易语言多线程任务分配让不同的线程账号执行不同的多个任务
  17. AdGuard2022手机电脑广告拦截工具
  18. 自然语言处理NLP简介
  19. Python基础知识详解 从入门到精通(八)魔法方法
  20. 2018 IROS,这款来自韩国的双臂机器人不容小觑!

热门文章

  1. JavaScript监听手机物理返回键的两种解决方法
  2. 关于websocket 在生产环境中遇到的问题 及 解决办法
  3. 【解决】缺少libstdc++.so.6库的原因及解决的方法
  4. 在github上托管Maven存储库
  5. 通过ng-change选择ng-object
  6. 在Visual Studio中一次运行两个项目
  7. 在Python中使用try-except-else是否是一种好习惯?
  8. java怎么录入4位会员号_【Java】录入会员号会员生日会员积分等会员信息,并判断录入的会员号是否合法,具体如下图...
  9. win11如何设置始终以管理员身份运行 windows11设置始终以管理员身份运行的方法步骤
  10. Android实战经验之图像处理及特效处理的集锦