I : 平均情况下的时间复杂度为:O(n) 期望值(expected); 最坏情况下的时间复杂度为:O(n的平方)即:每次对A划分为(0:n-1)
函数命名为:find_k_th(A, p, q, k) //int value = find_k_th(A, p, q, k): value为从A[p]到A[q]中第k小的值
可以从 random-quicksort 算法中(复杂度分析运用了随机变量指示器:indicator of random variable)将数组A进行划分,随机选取主元pivot,得到一个返回的值r(r为数组A中<=pivot 的索引,即:A[r] = pivot,小于pivot的个数为:num = r-p+1 ):
- num = k, 返回A[r], 即:A[r]为所要找的A中第k小的值;
- num < k, 递归地返回 find_k_th(A, r+1, q, k-num), 即:A的左边有num个小于第k小的值,则第k小的值 = 右边的第 k-num 小的值;
- num > k, 递归地返回 find_k_th(A, p, r-1, k), 即: num > k, 第k小的值在A的左边。