数据结构学习笔记----排序
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阶哈夫曼树)
各种排序的基本思路没有在笔记中记录。
如果待排序的表中,存在有多个关键字相同的元素,经过排序后这些具有相同关键字的元素之间的相对
次序保持不变,则称这种排序算法是稳定的。
在排序过程中,若整个表都是放在内存中处理,排序时不涉及数据的内、外存交换,则称之为内排序;
反之,若排序过程中要进行数据的内、外存交换,则称之为外排序。
数据结构中主要讲到了插入排序,交换排序,选择排序,归并排序,基数排序,外排序等几种排序,
每种排序都有不同的性能,根据情况来选择合适的排序算法。
其中插入排序,交换排序,选择排序,归并排序是基于比较的排序算法;
基数排序是不基于比较的排序算法。
基于比较的排序算法:
插入排序----直接插入排序算法:时间复杂度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阶哈夫曼树)
各种排序的基本思路没有在笔记中记录。
相关文章推荐
- 数据结构学习笔记排序 (冒泡、插入、希尔、堆排序、归并排序)
- 【数据结构学习笔记】——排序
- 深层次两张图解经典6大排序与6大基础数据结构——学完这些,妈妈再也不用担心我的排序算法与数据结构,学习笔记大放送
- 数据结构学习笔记-排序3
- python数据结构学习笔记-2016-10-24-01-排序列表
- 【学习笔记----数据结构27-排序】
- 数据结构学习笔记 --- 排序(Gnome排序、梳排序)
- python数据结构学习笔记-2016-11-24-01-快速排序
- 数据结构学习笔记23 快速排序和基尔排序
- 数据结构学习笔记 --- 排序(插入排序、希尔排序)
- 数据结构 学习笔记(十):排序(上):简单排序(冒泡,插入),希尔 / 选择 / 堆 / 归并 排序
- 数据结构学习笔记 --- 排序(冒泡排序、快速排序)
- 数据结构学习笔记 --- 排序(归并排序、基数排序)
- python数据结构学习笔记-2016-11-26-01-链表排序
- 数据结构学习笔记 --- 排序(选择排序、堆排序)
- python数据结构学习笔记-2016-10-23-02-排序
- 数据结构学习笔记 --- 排序(归并排序、基数排序)
- 黑马程序员之数据结构学习笔记:快速排序
- 数据结构 学习笔记(十一):排序(下):快速 / 表 / 桶 / 基数 排序,排序算法的比较
- python数据结构学习笔记-2016-10-28-01-带尾指针的链表和排序链表