《算法导论》笔记3-9
中位数和顺序统计
期望为线性时间的选择算法
这里的随机划分使用了快速排序中的随机版。
1 | randomized_select(A, low, high, index) |
这里的随机划分使用了快速排序中的随机版。
1 | randomized_select(A, low, high, index) |
计数排序假设 n 个输入元素中的每一个都是在 0 到 max 区间内的一个整数。(max 是数组里最大的数字)
基本思想:对每个输入元素 x,确定小于 x 的元素个数。利用这一信息,就可以直接把 x 放到它的输出数组中的位置了。例如如果有 17 个元素小于 x,则 x 就应该在第 18 个输出位置上。当有几个元素相同时,这一方案就要稍作修改,因为不能把它们放在同一输出位置。
假设输入数组是 A[0 … n],那么我们还需要两个数组:B[0 … n] 输出数组,C[0 … max] 临时数组。
与归并排序一样,快速排序也使用了分治思想,下面是对一个典型的子数组 A[low … high] 进行快速排序的三步分支过程:
判断空栈:
1 | stack_empty(S) |
压栈:
1 | push(S, x) |
弹栈:
1 | pop(S) |
递归查找:
1 | tree_search(root, k) |
旋转:
1 | left_rotate(T, root) |
插入:
(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树(除了最底层,该树是完全满的,而且是从左到右填充)。
表示堆的数组 A 包括两个属性: