冒泡、快速、归并排序

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

相关文章
相关标签/搜索