算法设计与分析
2022 1.17 by ponytail
次序选择问题
问题背景
给定数组,寻找其中最小值,第二小值,第K小值``````
形式化定义
求解方案
1.数组排序
求得所有元素的次序
时间复杂度为O(Nlogn) 选择元素时间复杂度O(1) 总时间复杂度O(Nlogn)
但是有很多无用的计算,因为我们只需要第k小的元素,别的都不需要。
2.快速排序思想
关于快速排序不再赘述
因为分解之后只有一个子问题,另外一个舍弃不用,所以不存在合并问题解
伪代码
时间复杂度
最好情况——直接找到,为O(n)
最坏情况——类似于快排,中轴每次都在一侧,复杂度为O(n+n-1+n-2+n-3+······+1)=O(n2)
如何摆脱最坏情况?使用随机位置划分
随机选择主元,共n种情况
复杂度分析
用代入法求解得,时间复杂度为O(n)