数据结构和算法

DSA 主页 DSA 概述 DSA 环境设置 DSA 算法基础 DSA 渐近分析

数据结构

DSA 数据结构基础 DSA 数据结构和类型 DSA 数组数据结构

链接列表

DSA 链接列表数据结构 DSA 双向链接列表数据结构 DSA 循环链表数据结构

堆栈 &队列

DSA 堆栈数据结构 DSA 表达式解析 DSA 队列数据结构

搜索算法

DSA 搜索算法 DSA 线性搜索算法 DSA 二分搜索算法 DSA 插值搜索 DSA 跳跃搜索算法 DSA 指数搜索 DSA 斐波那契搜索 DSA 子列表搜索 DSA 哈希表

排序算法

DSA 排序算法 DSA 冒泡排序算法 DSA 插入排序算法 DSA 选择排序算法 DSA 归并排序算法 DSA 希尔排序算法 DSA 堆排序 DSA 桶排序算法 DSA 计数排序算法 DSA 基数排序算法 DSA 快速排序算法

图形数据结构

DSA 图形数据结构 DSA 深度优先遍历 DSA 广度优先遍历 DSA 生成树

树数据结构

DSA 树数据结构 DSA 树遍历 DSA 二叉搜索树 DSA AVL 树 DSA 红黑树 DSA B树 DSA B+ 树 DSA 伸展树 DSA 尝试 DSA 堆数据结构

递归

DSA 递归算法 DSA 使用递归的汉诺塔 DSA 使用递归的斐波那契数列

分而治之

DSA 分而治之 DSA 最大最小问题 DSA 施特拉森矩阵乘法 DSA Karatsuba 算法

贪婪算法

DSA 贪婪算法 DSA 旅行商问题(贪婪方法) DSA Prim 最小生成树 DSA Kruskal 最小生成树 DSA Dijkstra 最短路径算法 DSA 地图着色算法 DSA 分数背包问题 DSA 作业排序截止日期 DSA 最佳合并模式算法

动态规划

DSA 动态规划 DSA 矩阵链乘法 DSA Floyd Warshall 算法 DSA 0-1 背包问题 DSA 最长公共子序列算法 DSA 旅行商问题(动态方法)

近似算法

DSA 近似算法 DSA 顶点覆盖算法 DSA 集合覆盖问题 DSA 旅行商问题(近似方法)

随机算法

DSA 随机算法 DSA 随机快速排序算法 DSA Karger 最小割算法 DSA Fisher-Yates 洗牌算法

DSA 有用资源

DSA 问答 DSA 快速指南


数据结构 - 排序技术

排序是指以特定格式排列数据。排序算法指定了以特定顺序排列数据的方式。最常见的顺序是数字顺序或字典顺序。

排序的重要性在于,如果数据以排序的方式存储,则可以将数据搜索优化到非常高的水平。排序还用于以更易读的格式表示数据。以下是一些实际场景中排序的示例 −

  • 电话簿 − 电话簿按姓名排序存储人员的电话号码,以便于搜索。

  • 字典 −字典按字母顺序存储单词,以便轻松搜索任何单词。

就地排序和非就地排序

排序算法可能需要一些额外的空间来比较和临时存储少量数据元素。这些算法不需要任何额外的空间,排序被称为就地排序,例如,在数组本身内进行。这称为就地排序。冒泡排序就是就地排序的一个例子。

然而,在某些排序算法中,程序所需的空间大于或等于被排序元素的数量。使用相等或更多空间的排序称为非就地排序。归并排序是非原地排序的一个例子。

稳定排序和非稳定排序

如果排序算法在对内容进行排序后,不会改变相似内容出现的顺序,则称为稳定排序。

稳定排序

如果排序算法在对内容进行排序后,会改变相似内容出现的顺序,则称为不稳定排序。

不稳定排序

当我们希望保持原始元素的顺序时,算法的稳定性就很重要,例如在元组中示例。

自适应和非自适应排序算法

如果排序算法利用了待排序列表中已"排序"的元素,则该算法被称为自适应算法。也就是说,在排序时,如果源列表中有一些元素已经排序,自适应算法会考虑到这一点,并尽量不重新排序它们。

非自适应算法是指不考虑已排序元素的算法。它们会强制对每个元素进行重新排序,以确认其排序结果。

重要术语

一些术语通常是在讨论排序技术时产生的,这里简要介绍一下它们:−

升序

如果一个值序列的后一个元素大于前一个元素,则称该序列为升序。例如,1、3、4、6、8、9 就是升序,因为每个后一个元素都大于前一个元素。

降序

如果序列中后继元素小于当前元素,则称该序列为降序。例如,9、8、6、4、3、1 为降序,因为每个后继元素都小于前一个元素。

非增序

如果序列中后继元素小于或等于其前一个元素,则称该序列为非增序。当序列包含重复值时,即为非增序。例如,9、8、6、3、3、1 是非递增顺序,因为每个后续元素都小于或等于(例如 3)但不大于任何前一个元素。

非递减顺序

如果序列中后续元素大于或等于其前一个元素,则称该序列为非递减顺序。当序列包含重复值时,就会出现这种顺序。例如,1、3、3、6、8、9 是非递减顺序,因为每个后续元素都大于或等于(例如 3)但不小于前一个元素。

有多种排序技术可用于对各种数据结构的内容进行排序。以下是其中一些 −