当前课程知识点:数据结构(上) > 第二章 向量(上) > (d1)有序向量:唯一化 > 02D1-1 有序性
欢迎同学们回来
接下来的几节 将重点围绕
有序向量展开讨论
所谓有序向量
是相对于无序向量而言
无序向量要求元素之间
至少应该能比较是否相等
我们称作比对操作
而有序向量呢 更为复杂
它需要能够判定任何一对元素孰大孰小
这叫作比较操作
元素之间可以相互比较
只是有序向量的一个必要条件
如果要成为一个真正的有序向量
还必须要求其中的元素
确实是按照顺序排列的
因此就存在一个如何甄别
一个向量是否有序的问题
那么为此呢 我们可以回忆起
此前所介绍的起泡排序
当时曾经讲过这么一个基本的事实
包含向量在内的任何一个序列
如果整体是有序的话
那么任何一对相邻的元素必然是顺序的
反之 如果是无序的话
那么至少存在一对相邻的元素是逆序的
如果将这种相邻的逆序元素
称作是逆序对的话
那么 这种相邻逆序对的总数
就可以成为度量一个向量逆序程度的指标
相应地 我们也就可以按照这种指标
来进行比较和统计
我们可以看到
主体上是由这个循环完成的
具体来说 就是从第一号
注意不是第零号元素开始
依次地 将当前的第i个元素
与第i-1个元素
也就是它的紧邻的前驱 进行比较
如果它们确实构成一个相邻的逆序对
就累计到累加器中去
最终将这个累加器返回
所以根据上面的分析 我们可以知道
一个向量是有序的
当且仅当经过disordered()判断以后
返回的值是零
实际上 我们后面会看到
只要向量中的元素本身是支持大小比较的
我们就有一定的办法将它转化为有序向量
其中的原因在于
经过这样的一个转换以后
虽然我们花费了一定的成本
但此后涉及到的很多操作
也就是相关算法
大多都可以优化 而且大大的优化
相应地所得
要远远比转换时
所花费的成本大的多
我们下面就来看一个例子
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)计算
--演示
--(a)计算--作业
-(b)计算模型
-(b)计算模型--作业
-(c)大O记号
-(c)大O记号--作业
-(d)算法分析
-(d)算法分析--作业
-(e)迭代与递归
-(e)迭代与递归--作业
-(xc)动态规划
-- 演示
-(xc)动态规划--作业
-本章测验--作业
-(a)接口与实现
--02A-5 复制
-(a)接口与实现--作业
-(b)可扩充向量
-(b)可扩充向量--作业
-(c)无序向量
--02C-1 概述
--02C-3 插入
--02C-6 查找
--02C-8 遍历
-(c)无序向量--作业
-(d1)有序向量:唯一化
-(d1)有序向量:唯一化--作业
-(d2)有序向量:二分查找
-(d2)有序向量:二分查找--作业
-(d3)有序向量:Fibonacci查找
-(d3)有序向量:Fibonacci查找--作业
-(d4)有序向量:二分查找(改进)
-(d4)有序向量:二分查找(改进)--作业
-(d5)有序向量:插值查找
-第二章 向量(下)--(d5)有序向量:插值查找
-(e)起泡排序
--02E-2 改进
--02E-3 反例
-(e)起泡排序--作业
-(f)归并排序
-(f)归并排序--作业
-本章测验--作业
-(a)接口与实现
--03A-4 实现
-(a)接口与实现--作业
-(b)无序列表
--03B-2 查找
-(b)无序列表--作业
-(c)有序列表
--03C-3 查找
-(c)有序列表--作业
-(d)选择排序
--03D-1 构思
--03D-2 实例
--03D-3 实现
--03D-4 推敲
--03D-6 性能
-(d)选择排序--作业
-(e)插入排序
--03E-1 经验
--03E-2 构思
--03E-3 对比
--03E-4 实例
--03E-5 实现
-(e)插入排序--作业
-(xd)习题辅导:LightHouse
-本章测验--作业
- (a)栈接口与实现
--04A-1 栈
--04A-2 实例
--04A-3 实现
- (a)栈接口与实现--作业
-(c1)栈应用:进制转换
-第四章 栈与队列--(c1)栈应用:进制转换
-(c2)栈应用:括号匹配
-(c2)栈应用:括号匹配--作业
-(c3)栈应用:栈混洗
-第四章 栈与队列--(c3)栈应用:栈混洗
-(c4)栈应用:中缀表达式求值
-(c4)栈应用:中缀表达式求值--作业
-(c5)栈应用:逆波兰表达式
-第四章 栈与队列--(c5)栈应用:逆波兰表达式
-(d)队列接口与实现
--04D-1 接口
--04D-2 实例
--04D-3 实现
-第四章 栈与队列--本章测验
-(a)树
--05A-1 动机
--05A-2 应用
-(a)树--作业
-(b)树的表示
--05B-2 父亲
--05B-3 孩子
-第五章 二叉树--(b)树的表示
-(c)二叉树
-(c)二叉树--作业
-(d)二叉树实现
-(d)二叉树实现--作业
-(e1)先序遍历
-(e1)先序遍历--作业
-(e2)中序遍历
-第五章 二叉树--(e2)中序遍历
-(e4)层次遍历
-第五章 二叉树--(e4)层次遍历
-(e5)重构
-(e5)重构--作业
-本章测验--作业
-(a)概述
-(a)概述--作业
-(b1)邻接矩阵
-(b1)邻接矩阵--作业
-(c)广度优先搜索
--06C-2 策略
--06C-3 实现
--06C-5 实例
-(c)广度优先搜索--作业
-(d)深度优先搜索
--06D-1 算法
--06D-2 框架
--06D-3 细节
-(d)深度优先搜索--作业
-第六章 图--本章测验