排序,就是要整理表中的元素,使之按关键字递增(或递减)有序排列。
如果待排序的表中,存在有多个关键字相同的元素,经过排序后这些具有相同关键字的元素之间的相对
次序保持不变,则称这种
排序算法是稳定的。
在排序过程中,若整个表都是放在内存中处理,排序时不涉及数据的内、外存交换,则称之为
内排序;
反之,若排序过程中要进行数据的内、外存交换,则称之为
外排序。
数据结构中主要讲到了插入排序,交换排序,选择排序,归并排序,基数排序,外排序等几种排序,
每种排序都有不同的性能,根据情况来选择合适的排序算法。
其中插入排序,交换排序,选择排序,归并排序是基于比较的排序算法;
基数排序是不基于比较的排序算法。
基于比较的排序算法:
插入排序----直接插入排序算法:时间复杂度O(n^2),空间复杂度O(1),与待排序数据的顺序有关,稳定的
折半插入排序:时间复杂度O(n^2),空间复杂度O(1),与待排序数据的顺序有关,稳定的
希尔(Shell)排序:时间复杂度
O(n^1.3),空间复杂度O(1),与待排序数据的顺序有关,不稳定的
交换排序----冒泡排序算法:时间复杂度O(n^2),空间复杂度O(1),与待排序数据的顺序有关,稳定的
快速排序算法:时间复杂度
O(nlogn),空间复杂度O(logn),与待排序数据的顺序有关,不稳定的
选择排序----简单选择排序算法:时间复杂度O(n^2),空间复杂度O(1),与待排序数据的顺序无关,不稳定的
堆排序:时间复杂度
O(nlogn),空间复杂度O(1),与待排序数据的顺序无关,不稳定的
归并排序----二路归并排序算法:时间复杂度
O(nlogn),空间复杂度O(n),与待排序数据的顺序无关,稳定的
不基于比较的排序算法:
基数排序----最低位优先(LSD),最高位优先(MSD)
时间复杂度
O(d*(n+r)),空间复杂度O(r),与待排序数据的顺序无关,稳定的
d为关键字的元组,如关键字为456,则d为3;
r为基数,例如对于二进制数r=2,十进制数r=10;
n为待排序的关键字的个数。
外排序:外排序的基本过程为分两个步骤:生成若干初始归并段(顺串)和多路归并。
多路归并就是将若干个有序文件归并成一个有序文件。
多路归并有两种实现方法:一种是败者树,一种是最佳归并树(带权路径长度最短的K阶哈夫曼树)
各种排序的基本思路没有在笔记中记录。