算法:查找序列最小k元素(分治法)

问题: 给定含有n元素的无序序列,求这个序列中第k(1<k<n)小的元素
求解 :无序序列在a[0…n-1],若将a递增排序,则第k小的元素为a[k-1]
❗a[s…t]既可表示初始序列,也可表示划分后的子序列
❗第k小元素下标为k-1
有三种情况:

  1. k-1= i, a[i]即为所求,返回a[i]。
  2. k-1<i , 第k小元素在a[s…i-1]子序列。
  3. 若*k-1> i *, 第k小元素在a[i+1…t]子序列。

✨代码实现如下:
算法:查找序列最小k元素(分治法)
算法:查找序列最小k元素(分治法)
算法分析:

最好情况: 每次划分基准恰好是中位数,T(n)=O(n);
最坏情况: 每次划分基准为序列中最大值或最小值,比较的次数为O(n²);
平均情况: 算法复杂度为O(n);

欢迎各路大神前来指导建议!????