冒泡、快速、归并排序

一:冒泡排序:减治排序
二:快速排序:分治算法
步骤:
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.合并有序数组

猜你喜欢

转载自blog.51cto.com/14232274/2438964