《算法导论》第9章 顺序统计学 (2)随机选择
转载randomized_select使用划分方法randomized_partition(),返回主元位置q(第k小元素)。
要查找的是第 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章 选择算法
书p119选择第i个最大的
python 算法 快速排序 -
算法导论-------------中位数和顺序统计学
文章来自网络加课本: 本次学习的内容讨论的问题是在一个由n个不同数值构成的集合中选择第i个顺
算法导论 中位数和顺序统计学 最小值 中位数 顺序统计量 -
【算法导论】第2章 算法基础
2.1 插入排序2.1-1 说明INSERTION-SORT在数组A=<31,41,59,26,41,58>上的执行过程。
算法导论 算法 运行时间 数组 插入排序 -
《统计学》学习笔记之导论
鄙人学习笔记。书籍:《统计学(第六版)》贾俊平文章目录导论统计学及其应用领域统计
统计学 数据 应用领域 时间序列