您的位置:首页 > 理论基础 > 数据结构算法

数据结构学习笔记----排序

2015-04-27 22:01 260 查看
排序,就是要整理表中的元素,使之按关键字递增(或递减)有序排列。

如果待排序的表中,存在有多个关键字相同的元素,经过排序后这些具有相同关键字的元素之间的相对
次序保持不变,则称这种排序算法是稳定的。

在排序过程中,若整个表都是放在内存中处理,排序时不涉及数据的内、外存交换,则称之为内排序;
反之,若排序过程中要进行数据的内、外存交换,则称之为外排序。

数据结构中主要讲到了插入排序,交换排序,选择排序,归并排序,基数排序,外排序等几种排序,
每种排序都有不同的性能,根据情况来选择合适的排序算法。
其中插入排序,交换排序,选择排序,归并排序是基于比较的排序算法;
基数排序是不基于比较的排序算法。

基于比较的排序算法:
插入排序----直接插入排序算法:时间复杂度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阶哈夫曼树)

各种排序的基本思路没有在笔记中记录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: