数据结构 - 排序技术
排序是指以特定格式排列数据。排序算法指定了以特定顺序排列数据的方式。最常见的顺序是数字顺序或字典顺序。
排序的重要性在于,如果数据以排序的方式存储,则可以将数据搜索优化到非常高的水平。排序还用于以更易读的格式表示数据。以下是一些实际场景中排序的示例 −
电话簿 − 电话簿按姓名排序存储人员的电话号码,以便于搜索。
字典 −字典按字母顺序存储单词,以便轻松搜索任何单词。
就地排序和非就地排序
排序算法可能需要一些额外的空间来比较和临时存储少量数据元素。这些算法不需要任何额外的空间,排序被称为就地排序,例如,在数组本身内进行。这称为就地排序。冒泡排序就是就地排序的一个例子。
然而,在某些排序算法中,程序所需的空间大于或等于被排序元素的数量。使用相等或更多空间的排序称为非就地排序。归并排序是非原地排序的一个例子。
稳定排序和非稳定排序
如果排序算法在对内容进行排序后,不会改变相似内容出现的顺序,则称为稳定排序。
如果排序算法在对内容进行排序后,会改变相似内容出现的顺序,则称为不稳定排序。
当我们希望保持原始元素的顺序时,算法的稳定性就很重要,例如在元组中示例。
自适应和非自适应排序算法
如果排序算法利用了待排序列表中已"排序"的元素,则该算法被称为自适应算法。也就是说,在排序时,如果源列表中有一些元素已经排序,自适应算法会考虑到这一点,并尽量不重新排序它们。
非自适应算法是指不考虑已排序元素的算法。它们会强制对每个元素进行重新排序,以确认其排序结果。
重要术语
一些术语通常是在讨论排序技术时产生的,这里简要介绍一下它们:−
升序
如果一个值序列的后一个元素大于前一个元素,则称该序列为升序。例如,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)但不小于前一个元素。
有多种排序技术可用于对各种数据结构的内容进行排序。以下是其中一些 −

