问题:给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素。(这里给定的线性集是无序的)。(如果将这个线性集先排好序,则排在第k个位置的元素即为要找的元素)

方法:线性时间选择随机划分法可以模仿随机化快速排序算法设计。基本思想是对输入数组进行递归划分,与快速排序不同的是,它只对划分出的子数组之一进行递归处理。

可以按以下步骤找到满足要求的划分基准:

  1. 将n个输入元素划分成n/5(向上取整)个组,每组5个元素,最多只可能有一个组不是5个元素。用任意一种排序算法,将每组中的元素排好序,并取出每组的中位数,共n/5(向上取整)个。

  2. 递归调用select来找出这n/5(向上取整)个元素的中位数。如果n/5(向上取整)是偶数,就找它的2个中位数中较大的一个作为划分基准。

思考草图:
线性时间选择

线性时间选择
线性时间选择
(每一组进行排序,最后不足5个的忽略)
————————————————————————————
线性时间选择
(找出每一组的中位数)
————————————————————————————
线性时间选择
(把中位数提出来)
————————————————————————————————————
线性时间选择
(找到中位数的中位数)

————————————————————————————————————
线性时间选择
(交换位置作为“轴”,借鉴快速排序)

线性时间选择
————————————————————————————线性时间选择
线性时间选择
线性时间选择

线性时间选择
线性时间选择
(找到k)

未完待续。。。。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2018-03-11
  • 2022-01-21
  • 2022-12-23
  • 2022-12-23
  • 2022-01-15
猜你喜欢
  • 2021-11-25
  • 2022-12-23
  • 2021-08-20
  • 2022-12-23
  • 2021-08-29
相关资源
相似解决方案