使用Python3实现算法导论中的案例、习题
- 最大子数组(分治策略)
已实现矩阵相乘,但矩阵的行、列必须是2^n(n为正整数)
- 插入排序insert_sort
从将未排序的数(在右边)第一个开始,插入到已经排好序的(在左边)数列中去,形成新的排好序的数列。这个方法被称作增量方法 - 选择排序selection_sort
依次在未排序的数列(在已排序数的右边)中选择最小的数,然后把它放到未排序数的第一个 - 冒泡排序bubble_sort
反复交换相邻的两个数,然后将较小者挤出去 - 堆排序heap_sort
建立最大堆,把最大元素换到堆的最后一个元素并踢出堆,维护最大堆 - 快速排序quick_sort
找到一个数,把比它小的放在它前面,比它大的放在它后面,包括:
- 现行版本quick_sort
- 随机化版本randomized_quick_sort
- 最初版本quick_sort_hoare,暂时未处理相同元素的数组
- 针对相同元素的随机化版本randomized_quick_sort_equal
- 计数排序counting_sort
找到数字排列的位置,然后将其放到相应位置。前提假设:小区间内的非负整数。如果区间过大,排序过程中产生的C中就有很多零,影响效率。 - 基数排序radix_sort
在元素的每一个位上排序(稳定的),循环了所有的位后排序完成。其中稳定排序用的是counting_sort。 - 桶排序bucket_sort
把元素放到不同的桶里,然后在桶里排序后在串起来。前提假设元素是[0,1)上的均匀分布。在桶里的排序用的是insert_sort,也可以用其它原址排序:堆排序。 - 3(n/2)次比较同时找到最大值和最小值
- randomized_select期望为线性时间的选择算法;randomized_select的循环版本。