排序就是将一组杂乱无章的数据按一定的规律(关键字)排列起来(或增或减)。在查找数据之前,我们可以通过排序操作对数据进行排序,以此方便数据查找。
排序的规律成为:关键字
关键字分为主关键字和次关键字
主关键字:通过主关键字进行排序,排序的结果是唯一的。常用的id
次关键字:通过次关键字进行排序的结果可能不是唯一的。姓名。性别等
稳定性:通过次关键字排序时,如果存在两条数据的次关键字的值相等,这两条数据经过算法排序后,依旧按照排序前的先后顺序,那么则称这个排序算法是稳定的。
衡量排序算法的标准:
1、所需要的平均比较次数
2、所需要的平均移动次数
3、所需要的平均辅助空间
内排序和外排序
内排序:实质在排序期间数据对象全部存放在内存的排序;这个过程是一个逐步扩大记录的有序序列长度的过程。数据记录序列,存在无序序列和有序序列两个区域。
外排序:是指在排序期间全部对象个数太多,不能同时存放在内存,必须根据排序过程的要求,不断地在内存和外村之间移动的排序。
排序的分类:基于不同的“扩大”有序序列长度的方法,内部排序方法可分为以下几个类别:
1、插入类(直接插入排序、折半插入排序、2——路插入排序、希尔排序)
2、交换类(冒泡排序、快速排序)
3、选择类(直接选择排序、锦标赛排序、堆排序)
4、归并类(通过“归并”两个或两个以上的记录有序序列子集,逐步增加记录有序序列的长度)
插入排序:每一步将待排序对象,按照其排序码(关键字)的大小,插入到已经排好序的有序序列里的适当位置。根据寻找插入点方式的不同,插入排序又可分为:
直接插入排序、折半插入排序、2——路插入排序、希尔排序。
交换排序:两两比较待排序对象的排序码(关键字),如果发生逆序,则交换之,知道所有对象都排好序为止。
选择排序:通过从无序序列中查找出排序码(关键字)最大值的数据记录或最小值的数据记录,将其按一定的方法进行一次移动到有序序列。
归并排序:主要是二路归并排序,通过“归并”两个或两个以上的记录有序序列子集,逐步增加记录有序序列的长度