排序
2016-03-23 12:48
218 查看
一、概述
根据排序所涉及的存储器,可分为内部排序和外部排序。内部排序是将待排序的数据元素全部存入计算机内存进行排序。外部是待排序的数据元素不全部装入内存,在排序过程中需要不断访问外存。
内部排序有:插入排序、交换排序、选择排序、归并排序
二、插入排序
是一种简单排序,复杂度为O(n2)。就是一个一个比较,找到对应的位置就插进去
三、希尔排序
先将整个待排记录序列分割为若干子序列,分别进行直接插入排序。比如首先2个一组,排好了后4个一组,然后8个.....
四、交换排序
1、冒泡
将第一个元素与第二个进行比较,前者大的话就交换。再将第二个与第三个交换....一次完了后最大的那个确定了。接着对除去已经确定的那个元素,对那个n-1个序列进行冒泡排序
2、快排
平均性能是最快的。但是在初始序列本来就已经排好的情况下是时间最差的。
基本思想是任选一个记录(通常是第一个),让其作为枢轴,以他和剩余的进行比较。把比他小的放在他左边,大的放在右边。好了之后以其为分割,左右两边分别进行排序。
操作的时候维护两个变量low,front。初始化时分别为最低位置和最高位置。当进行比较时,先front往左边,遇到第一个比枢轴小的数,就交换这两个数。然后low往右,遇到第一个比枢轴大的就交换.....这两个数轮流往中间缩进。当二者相等时比较结束。
五、选择排序
1、简单选择排序
基本思想是从剩余数列中选择第i小的数放入第i个位置。时间复杂度比较大
2、堆排序
堆排序分为大顶堆和小顶堆。大顶堆就是父节点大于孩纸节点。排序时,先输出根节点,再把剩下的节点重新生成大顶堆,再输出顶节点.......时间复杂度为O(nlogn),比快排快,且只占一个用于交换记录的临时空间。
六、归并排序
思想就是将两个有序的子序列合并为一个新序列。感觉有点像希尔排序。只不过希尔的两个数的选择是中间隔了几个数字的。如有8个,第一趟选的是(1,5)(2,6)(3,7)(4,8)。
归并的选则是(1,2)....
七、基数排序
就是排序的关键字有多个因素。比如排扑克牌,依据有花色和大小。实现时可以用线性链表
八、外部排序
当要排序的数据元素非常多,以致内存不能一次处理,这时需要将一部分放入外存
根据排序所涉及的存储器,可分为内部排序和外部排序。内部排序是将待排序的数据元素全部存入计算机内存进行排序。外部是待排序的数据元素不全部装入内存,在排序过程中需要不断访问外存。
内部排序有:插入排序、交换排序、选择排序、归并排序
二、插入排序
是一种简单排序,复杂度为O(n2)。就是一个一个比较,找到对应的位置就插进去
三、希尔排序
先将整个待排记录序列分割为若干子序列,分别进行直接插入排序。比如首先2个一组,排好了后4个一组,然后8个.....
四、交换排序
1、冒泡
将第一个元素与第二个进行比较,前者大的话就交换。再将第二个与第三个交换....一次完了后最大的那个确定了。接着对除去已经确定的那个元素,对那个n-1个序列进行冒泡排序
2、快排
平均性能是最快的。但是在初始序列本来就已经排好的情况下是时间最差的。
基本思想是任选一个记录(通常是第一个),让其作为枢轴,以他和剩余的进行比较。把比他小的放在他左边,大的放在右边。好了之后以其为分割,左右两边分别进行排序。
操作的时候维护两个变量low,front。初始化时分别为最低位置和最高位置。当进行比较时,先front往左边,遇到第一个比枢轴小的数,就交换这两个数。然后low往右,遇到第一个比枢轴大的就交换.....这两个数轮流往中间缩进。当二者相等时比较结束。
五、选择排序
1、简单选择排序
基本思想是从剩余数列中选择第i小的数放入第i个位置。时间复杂度比较大
2、堆排序
堆排序分为大顶堆和小顶堆。大顶堆就是父节点大于孩纸节点。排序时,先输出根节点,再把剩下的节点重新生成大顶堆,再输出顶节点.......时间复杂度为O(nlogn),比快排快,且只占一个用于交换记录的临时空间。
六、归并排序
思想就是将两个有序的子序列合并为一个新序列。感觉有点像希尔排序。只不过希尔的两个数的选择是中间隔了几个数字的。如有8个,第一趟选的是(1,5)(2,6)(3,7)(4,8)。
归并的选则是(1,2)....
七、基数排序
就是排序的关键字有多个因素。比如排扑克牌,依据有花色和大小。实现时可以用线性链表
八、外部排序
当要排序的数据元素非常多,以致内存不能一次处理,这时需要将一部分放入外存
相关文章推荐
- 查找
- 数组和广义表
- http协议学习
- 串-KMP算法
- 栈和队列
- 线性表
- 转-int ,long , lo…
- 转-struct和typedef的用法
- 发送多张图片进行区分
- 发送单张图片时解决打开问题
- Linux学习笔记(十一)-系统安全篇…
- Linux学习笔记(十)-服务器配置篇…
- Linux学习笔记(九)-服务器配置篇…
- Linux学习笔记(八)-程序开发篇之…
- Ubuntu安装中文输入法
- BZOJ3679: 数字之积
- Springframework(一)spring基础概念介绍
- Linux学习笔记(七)-网络篇和多媒…
- Linux学习笔记(六)-系统管理篇之…
- Linux学习笔记(五)-系统管理篇之…