经典的排序算法有十种,分别是:选择排序、插入排序、希尔排序、冒泡排序、堆排序、合并排序、快速排序、计数排序、基数排序和桶排序。
下面对这些算法分类如下:
选择排序:简单选择排序、堆排序
插入排序:直接插入排序、二分插入排序、希尔排序
快速排序:快速排序、随机化快速排序
线性时间排序:计数排序、基数排序、桶排序
其他:冒泡排序、合并排序
这些排序排序算法的时间复杂度,稳...
分类:
其他好文 时间:
2014-08-20 16:31:32
阅读次数:
185
堆这个数据结构应用非常广泛,数字图像处理的算法里也见过。似乎记得以前老师上课说需要用树结构实现堆排序,看了一下算法导论才明白其精髓。堆虽然是一棵树,但显然没必要非得用树结构实现堆排序。堆排序的性质很好,算法时间复杂度为O(nlgn)。1. 堆排序的简要说明。二叉堆可以分为两种形式:最大堆和最小堆。在...
分类:
其他好文 时间:
2014-08-19 23:48:35
阅读次数:
325
求两个已排过序的等长的数组的中位数(median of two sorted arrays)...
分类:
其他好文 时间:
2014-08-18 18:46:33
阅读次数:
337
/*
* 算法导论 第九章 中位数和顺序统计学
* 线性时间选择元素
*/
#include
#include
using namespace std;
int minimum(int *arr, int len);
int randomizedSelect(int *arr, int p, int r, int i);
int randomizedPartition(int *ar...
分类:
其他好文 时间:
2014-08-18 18:32:42
阅读次数:
208
概述:
动态规划是通过组合子问题的解而解决整个问题的。
动态规划适用于子问题不是独立的情况,也就是各子问题的包含公共的子子问题。
动态规划对每个子问题只求解一次,将其结果保存在一张表中。
动态规划通常用于最优化问题。
动态规划的设计步骤:a.描述最优解的结构b.递归定义最优解的值c.按自底向上的方式计算最优觖的值d.由计算出的结构构造一个最优解
15.1钢条切割...
分类:
其他好文 时间:
2014-08-18 14:34:02
阅读次数:
367
从数组array中找出第k小的元素,即经典的“线性时间选择”问题...
分类:
其他好文 时间:
2014-08-17 21:26:12
阅读次数:
276
import sysclass mergesort(): def merge_sort(self, A, p, r): if p < r: q = (p + r) / 2 self.merge_sort(A, p, q) ...
分类:
编程语言 时间:
2014-08-17 15:30:52
阅读次数:
166
数据结构和算法理解很简单,深感算法导论的介绍更是精辟而无累赘。例如:1. 直接切入二叉搜索树,而不是从树开始介绍各种繁琐的表示方式,最后的重点结果还是二叉搜索和几种平衡树,算法导论介绍知识的时候数学性虽强,但应用性也十足,它的 应用性不在于给你代码,而在于给你应用的场景,告诉你各种结构的优劣和...
分类:
编程语言 时间:
2014-08-17 15:28:42
阅读次数:
241