《算法导论》第9章 顺序统计学 (2)随机选择
2012-02-25 23:00
267 查看
randomized_select使用划分方法randomized_partition(),返回主元位置q(第k小元素)。
要查找的是第 i 小元素,若恰好等于k,那么直接返回。
如果 i < k,则继续在[p, q - 1]中搜索第 i 小元素。
如果 i > k,则继续在[q + 1, r]中搜索第 i - k 小元素。
例如,randomized_partition执行后数组A为:2, 4, 7, 8, 11, 9, 13。
元素8是主元,q = 3,即8是第4小的元素。要查找的是第 i = 2 小元素。
则继续在[2, 4, 7]中查找第2小元素。
假如要查找的是第6小元素,则在[11, 9, 13]查找第2(6 - 4)小元素,即7。
要查找的是第 i 小元素,若恰好等于k,那么直接返回。
如果 i < k,则继续在[p, q - 1]中搜索第 i 小元素。
如果 i > k,则继续在[q + 1, r]中搜索第 i - k 小元素。
int randomized_select(int A[], int p, int r, int i) { if (p == r) return A[p]; int q = randomized_partition(A, p, r); int k = q - p + 1; if (i == k) return A[q]; else if (i < k) return randomized_select(A, p, q - 1, i); else return randomized_select(A, q + 1, r, i - k); } int main(void) { int A[] = { 2, 8, 9, 13, 4, 7, 11 }; int ret = randomized_select(A, 0, 6, 2); printf("%d\n", ret); }
例如,randomized_partition执行后数组A为:2, 4, 7, 8, 11, 9, 13。
元素8是主元,q = 3,即8是第4小的元素。要查找的是第 i = 2 小元素。
则继续在[2, 4, 7]中查找第2小元素。
假如要查找的是第6小元素,则在[11, 9, 13]查找第2(6 - 4)小元素,即7。
相关文章推荐
- 《算法导论》第9章 顺序统计学 (2)随机选择
- 《算法导论》第9章 顺序统计学 (2)随机选择
- 《算法导论》第9章 顺序统计学 (2)随机选择
- 《算法导论》读书笔记之第9章 中位数和顺序统计学 最坏情况是线性时间的选择算法
- 算法导论 第9章 中位数和顺序统计学(线性时间选择算法)
- 算法导论 第9章 中位数和顺序统计学(线性时间选择算法)
- 《算法导论》第9章 顺序统计学 (1)最小值和最大值
- 《算法导论》读书笔记之第9章 中位数和顺序统计学
- 《算法导论》第9章 顺序统计学 (1)最小值和最大值
- 《算法导论》第9章 顺序统计学 (1)最小值和最大值
- 算法导论(第9章-中位数和顺序统计学)最大值和最小值
- 《算法导论》第9章 顺序统计学 (1)最小值和最大值
- 《算法导论》读书笔记之第9章 中位数和顺序统计学
- 《算法导论》读书笔记之第9章 中位数和顺序统计学
- 算法导论 第9章 排序和顺序统计学算法导论
- 算法导论学习笔记——第9章 中位数和顺序统计学
- 算法导论代码 第9章 中位数和顺序统计学
- 算法导论第9章 中位数和顺序统计学
- 算法导论学习笔记-第9章 中位数和顺序统计学
- 《算法导论》第九章----中位数和顺序统计学