冒泡、快速、归并排序
2019-09-18 16:11
387 查看
一:冒泡排序:减治排序
二:快速排序:分治算法
步骤:
1.在整个待排序空间内找一个基准值
2.遍历整个待排序区间,将所有数据和基准值进行比较,最终达到
比基准值大的(可以包含等于的)在基准值的右边
比基准值小的(可以包含等于的)在基准值的左边
3.用同样的策略处理左右两个小的待排序区间,直到
a:小区间内没有数据了(size==0)
b:小区间已经有序(size==1)
聚焦在第一步,为了避免取最边上为基准值导致的,如果数据已经有序、逆序就是最坏情况
1)最边上
2)随机取
3)多数取中(三数取中)
第二步有四种方法:
1)左右往中间靠: a:hover b:挖坑
2)前后遍历 a:前后遍历 b:把和基准值相等的单独处理
如何计算时间复杂度:
1)partition的过程,时间复杂度为O(n)
2)确定做多少层partition:
可以把分治的过程看成一棵二叉树,其高度就是层数
二叉树的高度:O(log(n))-O(n))
如何计算空间复杂度:
1)确定递归方法的调用栈需要最多多少层:
需要二叉树的高度层,所以为O(log(n))-O(n)
三:归并排序(合并排序):
合并两个有序数组的过程
0.平均切分待排序区间,如果待排序的左右两个小区间已经有序,
则按照合并有序数组的方式,使最终区间有序
1.先找到中间位置,划分左右两个小区间,直到小区间的长度==1或<1
2.分治的思想,先排序左右两个小区间
3.合并有序数组
相关文章推荐
- 排序算法总结(二)-------选择,堆,冒泡,快速,归并排序(java实现)
- 冒泡,简单选择,直接插入,快速排序,希尔排序,归并排序等几大排序----C语言
- 笨办法学 Python · 续 练习 16:冒泡、快速和归并排序
- 交换排序---冒泡、快速、归并排序
- 排序算法复习(Java实现):插入,冒泡,选择,Shell,快速排序, 归并排序,堆排序,桶式排序,基数排序
- 排序总结:插入(简单和改进)、希尔、选择、冒泡、快速、堆排序、归并排序
- python中经典的几大算法:冒泡、选择、插入、快速、希尔、归并排序
- 冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序六大排序大总结
- 各种排序算法-Java-冒泡、选择、插入、快速、归并排序
- Python实现快速,冒泡和归并排序
- 小白学数据结构——四、排序算法Python(冒泡、选择、快速、插入、希尔、归并排序)
- 六、内部排序综合(九种)—插入类排序(直接插入、折半插入、希尔排序);交换类排序(冒泡、快速);选择类排序(简单选择、堆排序);二路归并排序;基数排序
- 排序算法Python(冒泡、选择、快速、插入、希尔、归并排序)
- 排序算法Python(冒泡、选择、快速、插入、希尔、归并排序)
- 排序算法Python(冒泡、选择、快速、插入、希尔、归并排序)
- 直接插入、冒泡、快速、简单选择、堆、归并排序算法Java语言
- 链表面试题-单链表排序(冒泡,快速,归并)
- 选择排序、冒泡排序、插入排序、基数排序、快速排序、归并排序完整C++实现
- 排序(1)--冒泡,简单选择,快速,简单插入
- O(lgn)的三种排序,快速排序、归并排序、堆排序