分治法:对于一个规模为n的问题,可以将其划分为k个规模较小的问题,这些子问题互相独立且与原问题形式相同,通过递归解这些子问题,然后将子问题的解合并得到原问题的解。
动态规划法:利用分治思想,将问题实例分解为更小、相似的子问题,并存储子问题的解而避免计算重复的子问题。
贪心算法:它是一种不追求最优解,而希望得到较为满意解的方法。只看到眼前利益,去选择最优的,而不考虑其他情况,但是比穷举好,节约资源,不需要·回溯。
回溯算法:基本思想:从一条路往前走,能进则进,不能进就退回来,换一条路试试。其实现一般要用到递归和堆栈。
分治和动态规划通常要用到回溯。
直接插入排序:基本思想:每步将一个待排序的记录按其排序码值的大小,插到前面已经排好的数的适当位置,直到全部插入完为止。
希尔排序:把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
直接选择排序:是一种简单的排序方法,它的基本思想是:第一次从R~R[n-1]中选取最小值,与R交换,第二次从R~R[n-1]中选取最小值,与R交换,....,第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列·.
堆排序:是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
冒泡排序:每一次循环大数沉底
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列.
快速排序:在平均状况下,排序一个项目要比较O(logn)。在最坏状况下则需要O(n^2)次比较,但这种状况并不常见。采用“分而治之、各个击破”的思想。
从数列中挑出一个元素,称为“基准”,重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任何一边)。在这个分区结束之后,该基准就处于数列的中间位置。
归并排序:该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
基数排序:基本思想:从低位到高位依次对待排序的关键码进行分配和收集,经过d趟分配和收集,就能得到一个有序序列。
以最高位数为准:
首先根据个位数的数值,在走访数值时将它们分配至编号0到9的桶中:
接着再进行一次分配,这次是根据十位数来分配: