§ 二路归并排序
§ 多段2路合并
§ 二路合并
§ 堆排序
§ 直接选择排序
§ 冒泡算法的改进
§ 快速排序*
§ 冒泡排序
§
§ 直接插入排序
§ 外排排简介
§
§ 选择排序
§ 交换排序
§ 插入排序
§ 概述
第 11 章排序算法
从操作角度看,排序是线性结构的一种操作,在当今的计算机系统中,花费在排序上的时间占系统CPU运行时间的比重很大。有资料表明,在一些商用计算机上,用在排序上的CPU时间达到20%至60%。为了提高排序效率,人们已对排序进行了许多研究,提出了许多方法/算法。从算法设计角度看。排序算法不仅对排序本身重要,而且展示了算法设计的某些重要原则和高超的技巧,所以也是重要的算法设计方法。因此,对于计算机专业人员来说,认真研究和掌握排序算法是十分重要的。
§ 概述
排序(Sorting)(也称整序)通常被理解为按规定的原则重新安排一组给定的对象的的排列次序。排序的主要目的是便于以后在已排序的集合中查找/检索某一成员。日常生活中,通过排序以便于检索的例子屡见不鲜。例如,电话号码簿、目录表、图书馆、词典、仓库以及一切需对所存贮的对象进行检索的地方都要先将对象加以排序。下面先介绍若干概念。
:关键字形式上是记录中的某个字段(或某些字段的组合),在具体的操作中,用于代表其所在的记录。对排序操作,是以关键字字段的内容的大小进行排序的。记录中关键字字段的值称为键值。键值一般为数值或字符串。
:在数据结构中,排序被认为是定义在数据集合上的一种运算,其功能是将一组任意排列的数据元素(在排序中称为记录)重新排列成一个按键值有序的序列。具体地,排序定义如下定义:
设{R1,R2,…,Rn}为含n个记录的序列,其相应的键值序列为{k1,k2,…kn}。排序是将这些记录重新排列为{Ri1,Ri2,…,Rin},使得相应的键值满足条件ki1≤ki2≤…≤kin(升序),或满足ki1≥ki2≥…≥kin(降序)。这里的比较运算(≤或≥),或是数值比较,或是字符串比较。
:假定在待排序的记录集中,存在多个具有相同键值的记录,若经过排序,这些记录的相对次序仍然保持不变(即在原序列中ki=kj,i<j;而在排序后的序列中,Ri 仍在Rj之前),则称这种排序方法是稳定的,否则称为不稳定的。
:由于记录的形式、数量和所存放的存储设备不同,排序所采用的方法也不同。按照排序过程涉及的存储设备的不同,排序分为内排序(internal sorting)和外排序(external sorting)两大类。内排序是指在排序的整个过程中,数据全部存放在计算机的内存中,排序所需所有操作只需在内存中进行,不需进行内外存交换。内排序适用于记录个数不太多的小文件,同时也是外排序的基础。
:是指在排序过程中,待排序的数据较多,不能一次全部装入内存继续排序,需进行内外存交换(即读入部分数据,处理后写回外存,然后再读入其他部分)。外排序适用于记录个数很多,不能一次将其全部都放入内存的大文件。
本章先集中讨论内排序的各种典型方法和算法,最后再简单介绍一下外排序。
:按多个关键字排序。这主要针对关键字值有重复的情况。首先按第一关键字排序,对第一关键字相等的记录,按第二关键字排序,而第二关键字也相等的记录再按第三关键字排,余类推。
多键排序有两种方式(设第1到第n个关键字分别为k1, k2, …, kn):
a) 依次对记录进行n次排序,第一次按kn排序,第二次按kn-1,…, 最后一次按k1排。这种方法要求各趟排序所用算法是稳定的。
b) 先将关键字k1, k2, …, kn分别视为字符串,将它们依次首尾连接在一起,形成一个字符串,然后,对记录集按新形成的字符串排序。
不论那种无法,多键排序都被转化为了单键排序,所以,我们只讨论单键排序的情况。
显然,方法b)的速度要快于a).
内排序的方法很多,如果按排序过程中依据的不同原则对内排序方法进行分类,则主要分为为:插入排序、交换排序、选择排序、归并排序等四类,另一类是分配排序。
为了比较各种排序算法的优劣,要分析算法的时间复杂性。为此,通常只考虑键值的比较次数和记录的移动次数,即以键值比较和记录移动为标准操作。当键值是字串的时候,比较要占用较多的时间,是影响时间复杂性的主要因素。而当记录很大时,为了交换记录的位置,移动记录也要占用较多的时间,是影响时间复杂性的另一个主要因素。评价排序的另一个主要标准
数据结构与算法C11 来自淘豆网m.daumloan.com转载请标明出处.