算法第二章实践作业

一. 找第 k 小的数的分治算法(快速选择,基于快排思想)
算法思想

  1. 在数组中选一个基准元素 pivot,把数组划分成两部分:左边所有元素 ≤ pivot,右边所有元素 ≥ pivot。划分完成后,基准元素就处在它最终的有序位置。
  2. 假设基准下标为 pos:
    如果 pos == k-1:pivot 就是第 k 小元素,直接返回;
    如果 pos > k-1:第 k 小元素落在左子区间,递归在左半部分查找;
    如果 pos < k-1:第 k 小元素落在右子区间,递归在右半部分查找,并且要找的变成第 k-pos-1 小。

二.时间复杂度分析

  • 最好时间复杂度:(O(n))
  • 最坏时间复杂度:(O(n^2))

三.对分治法的体会和思考
分治法核心思想:分、治、合。把一个规模大的原问题,分解成若干个结构相同、规模更小的子问题;递归求解子问题;最后合并子问题结果,得到原问题答案。

  1. 分:将大问题拆成独立的子问题,子问题和原问题规则一样,只是规模更小。像快速选择,每次划分数组,只需要继续在一侧子区间搜索。
  2. 治:递归解决子问题;子问题足够小时直接求解(递归出口)。
  3. 合:部分分治算法(归并排序)需要合并子问题结果;而快速选择这类算法,不需要合并,划分之后直接判断去哪一侧递归,“合” 的步骤省略。
posted @ 2026-10-11 15:26  Tracy__cc  阅读(3)  评论(0)    收藏  举报