【数据结构笔记37】表排序与物理排序
本次笔记内容:
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. 插入排序算法 2. 折半插入排序算法 3. 2路插入排序算法 ...
- 数据结构笔记--线性表定义与实现(Swift)
数据结构笔记系列 数据结构笔记-两个有序链表合并成一个有序链表 线性表 线性表是最常用且最简单的一种数据结构,简言之,一个线性表是 n 个数据元素的有序序列. 特点 只有一个首结点和尾结点: 除首 ...
- 二、考研数据结构笔记——绪论(理解数据结构,算法,时间复杂度计算做题技巧)
一.数据结构基本概念 1.数据:数据是信息的载体.客观事物的一种表现形式.万事万物都能用数据表示出来. 2.数据元素:数据元素是数据的基本单位,一个数据元素有若干个数据项组成 3.数据项:构成数据元素 ...
- 一、考研数据结构笔记——引言及目录
一.关于我理解的数据结构 1. 引言 本人自2021年3月准备考研,考研主要是为了提升学历,本科院校不是理想.迫切需要提高学历. 写这刊博客,主要是总结我考研路上对数据结构的一些理解,以及为了方便我后 ...
- [课程复习] 数据结构之线性表、树、图、查找、排序经典算法复习
作者最近在复习考博,乘此机会分享一些计算机科学与技术.软件工程等相关专业课程考题,一方面分享给考研.考博.找工作的博友,另一方面也是自己今后完成这些课程的复习资料,同时也是在线笔记.基础知识,希望对您 ...
- 数据结构笔记(王道考研) 第八章:排序
大部分内容基于中国大学MOOC的2021考研数据结构课程所做的笔记,该课属于付费课程(不过盗版网盘资源也不难找...).后续又根据23年考研的大纲对内容做了一些调整,将二叉排序树和平衡二叉树的内容挪到 ...
- 堆排序 C++代码实现及思想 排序过程输出 恋上数据结构笔记
复习梗概 文章目录 复习梗概 什么是堆思想? 堆排序算法怎么来的? 什么是下滤?代码 什么是建堆?代码 堆排序本体 代码及排序过程输出 和时间复杂度 完整代码 什么是堆思想? 最大堆:树形结构,每一个 ...
- 02_Python算法+数据结构笔记-冒泡排序-选择排序-插入排序-快排-二叉树
b站视频:路飞IT学城 清华计算机博士带你学习Python算法+数据结构_哔哩哔哩_bilibili 文章目录 #11 排序介绍 #12 冒泡排序介绍 #13 冒泡排序 #14 选择排序 #15 插入 ...
- 数据结构笔记:选择排序
原文地址添加链接描述 分类目录--数据结构笔记 每一步在未排序部分去比较当前标记的最小值(初始化为第1个)与当前值的大小,更新(或不跟新)最小值的索引,维护的是一个最小值的索引 每一轮找一个最小值,替 ...
最新文章
- LCA 在线倍增法 求最近公共祖先
- jupyter中中文显示不正常_jupyter 中文乱码设置编码格式 避免控制台输出的解决...
- 《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)
- Android4.0 以后不允许在主线程进行网络连接
- javaone_JavaOne 2012:向上,向上和向外:使用Akka扩展软件
- 开发中常用的加密算法大全初步总结
- 解决Git无法同步空文件夹的问题
- 自学TP5源码(一)
- canvas+js画时钟
- spss导入Excel显示连接服务器超时,Excel里的日期在spss里怎么不正常显示
- 用计算机将复数转换成角度,计算机复数计算
- CF1427F-Boring Card Game【贪心】
- PDF写出:使用fop输出为pdf格式文件的Demo
- psCS6图片文件无法直接拖入的解决方法
- Py之shap:shap库的简介、安装、使用方法之详细攻略
- 易语言多线程任务分配让不同的线程账号执行不同的多个任务
- AdGuard2022手机电脑广告拦截工具
- 自然语言处理NLP简介
- Python基础知识详解 从入门到精通(八)魔法方法
- 2018 IROS,这款来自韩国的双臂机器人不容小觑!
热门文章
- JavaScript监听手机物理返回键的两种解决方法
- 关于websocket 在生产环境中遇到的问题 及 解决办法
- 【解决】缺少libstdc++.so.6库的原因及解决的方法
- 在github上托管Maven存储库
- 通过ng-change选择ng-object
- 在Visual Studio中一次运行两个项目
- 在Python中使用try-except-else是否是一种好习惯?
- java怎么录入4位会员号_【Java】录入会员号会员生日会员积分等会员信息,并判断录入的会员号是否合法,具体如下图...
- win11如何设置始终以管理员身份运行 windows11设置始终以管理员身份运行的方法步骤
- Android实战经验之图像处理及特效处理的集锦