C++算法之——常用算法总结
http://blog.sina.com.cn/s/blog_61bebe480100v7c7.html 基本的C++算法分为三类:排序算法、树算法、图算法 算法思想有三种:递推、分治、动态规划 以及 贪心算法。 本文将简要介绍上面三类算法,介绍时穿插介绍算法思想。 一、排序算法 1、基本O(n^2)排序算法: (对基本排序算法的时间复杂度分析主要考虑 比较次数、数据交换次数) 冒泡排序:针对数组、本地排序、需要交换数据。O(1)额外空间 选择排序:一般针对数组、本地排序、需要交换数据。O(1)的额外空间 插入排序:可以是针对数组的本地排序,此时需要移动大片数据,但是比较次数是O(N*logN)。如果是针对链表,比较次数是O(N^2),但是不需要交换数据。 注意:一般排序都是针对数组的本地排序,数组与链表相比,可以随机访问,空间使用效率更高(链表需要存放指针),而链表一般对于插入与删除操作有更好的性能。 2. O(N*logN)算法 快速排序:针对数组的本地排序,时间复杂度平均O(N*logN),最坏时O(N^2)。空间复杂度O(1) 归并排序:可以针对数组,也可以针对链表。针对数组时时间复杂度为O(N*logN),空间复杂度为O(N) 3. 堆排序 1991年计算机先驱奖获得者、斯坦福大学计算机科学系教授 罗伯特·弗洛伊德 (Robert W.Floyd)和威廉姆斯(J