1. 排序
所谓排序就是整理“表”中的记录,使之按关键字递增(或递减)有序排列。
假设含n个数据元素的序列为{ R1,R2,…...,Rn R 1 , R 2 , … . . . , R n },其相应的关键字分别为{ K1,K2,…...,Kn K 1 , K 2 , … . . . , K n }这些关键字相互之间可以进行比较,即在它们之间存在着这样一个关系:Kp1 ≤ Kp2 ≤ … ≤ Kpn,使得序列成为一个按关键字有序的序列{ Rp1, Rp2 , …,Rpn},这样的操作就称为排序。
来看一个例子:
图1-排序
假设现在有一张成绩表,在这张表中有每个学生的姓名和成绩,在排序前表中的每个学生的成绩都是无序的,当我们对成绩表中每个学生按成绩进行排序后就可以很直观的看到成绩的变化了,每个学生的成绩都是以增序的方式进行排列的
,比如:王二和小明的成绩是一样的,而赵六的成绩是最高的。
2. 排序的稳定性
如果在序列中有两个数据元素r[i]和r[j],它们的关键字k[i] == k [j],且在排序之前,对象r[i]排在r[j]前面。如果在排序之后,对象r[i]仍在r[j]前面,则称这个排序方法是稳定的,否则称这个排序方法是不稳定的。
图2-排序的稳定性
如图2所示,王二和小明的成绩都是67,在排序前,王二的位置是在小明的前面,如果在排序后王二依然在前面,那么这个排序是稳定排序,反之就是非稳定排序。
3. 排序分类
前面我们在学习查找时知道:查找也分为内部查找和外部查找,对于排序也是如此,排序分类主要分为内排序和外排序,在排序过程中,若整个表的数据都是放在内存中处理,排序时不涉及数据的内,外存交换的则称为内部内排序。反之,如果在排序时数据量非常大,需要进行内,外交换的,则称为外排序。
基于比较的排序算法和不基于比较的排序算法有:如插入排序,交换排序,选择排序和归并排序是基于比较的排序算法;而像基数排序是不基于比较的排序算法。