Advertisement

作业6的任务是分治求解第K小的数

阅读量:

1.问题

假设集合L包含n个元素,从中确定第K小的元素,其中K的取值范围为1到n之间。

2.解析框架构建

在这里插入图片描述
  1. 任取序列中的一个数值m,当该数值满足其前面存在的数的数量等于|S1|+1时,即可判定m为序列中第K小的元素。
  2. 当K小于|S1|时,将问题的范围进行缩减,转化为在集合S1中确定第K小的数值。
  3. 若K大于|S2|,则同样缩小问题规模,将其转化为在集合S2中查找第K-|S1|-1小的数值。
  4. 持续循环执行步骤1、2与3,直至最终确定第K小的数值。
在这里插入图片描述

3.设计

复制代码
    void getKth(int arr[], int low, int high, int K)
    {
    int tmp = arr[low], l = low, r = high;
    while (low <

全部评论 (0)

还没有任何评论哟~