归并排序是建立在归并操作上的一种有效的排序算法。该算法是採用分治法(Divide and Conquer)的一个很典型的应用。首先考虑下怎样将将二个有序数列合并。这个很easy,仅仅要从比較二个数列的第一个数,谁小就先取谁,取了后就在相应数列中删除这个数。然后再进行比較,假设有数列为空,那直接将还有...
分类:
其他好文 时间:
2014-07-24 22:33:52
阅读次数:
144
拓扑排序的定义:把每个变量看成一个点,”小于“或者”先后“关系看成有向边,则我们得到一个有向图。这样我们的任务实际上是把一个图的所有节点排序,使每一条有向边的(u,v)对应的u都排在v之前,在图论中,我们称之为拓扑排序。不难发现,如果一个有向图里存在回路,则不存在拓扑排序(如果设置一个标志数组,我们...
分类:
其他好文 时间:
2014-07-24 12:12:25
阅读次数:
258
1.1
算法思路——
该算法在数组中选定一个元素作为主元(一般选第一个),然后以这个主元为参考对象将数组分为两个部分,第一部分都是小于或者等于主元,第二部分都是大于或者等于主元。然后对第一和第二部分递归地使用快速排序算法,直到分到最小的小组为止。
1.2
时间复杂度——
在最差的情况下,要把n个元素的数组划分,需要n次比较和n次移动。假设用T(n)
来表示使用快速排序算法来排序n个元素...
分类:
其他好文 时间:
2014-07-24 10:36:04
阅读次数:
259
算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序?n?个项目要Ο(n?log?n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其...
分类:
其他好文 时间:
2014-07-23 13:57:56
阅读次数:
278
归并排序是将两个或两个以上有序子序列归并成一个有序数列的排序的排序算法,其时间复杂度O(n*log n)仅次于快速排序。在内排序中,通常采用的是2-路归并,即每两个子序列为一组进行排序。归并排序的原理是:设初始序列含有N个记录,则可以看成N个有序的子列,每个子序列的长度为1,然后两两归并,得到N/2个长度为2或1的子序列,再两两归并,如此重复的归并下去,直到到达一个有序的序列为止。
设初始数组为...
分类:
其他好文 时间:
2014-07-23 13:22:56
阅读次数:
231
一、定义:
拓扑排序是对有向无回路图(DAG)顶点的一种排序,它使得如果存在从u到v的有向路径,那么满足序列中u在v前。
例如:(来自于某牛)
最后变成
所以我们的算法可以描述为这样一个过程:
1、找到整个图中所有的原点,将这些点压进队列(栈)中
2、从队列(栈)中取出一点,输出,将该点及它的边删除,找到它所指向的点,如果改点是一个原点(删除指向它的点后),...
分类:
其他好文 时间:
2014-07-23 13:15:06
阅读次数:
222
描述:快速排序可以理解为:分+递归,主要思想是分治。先找一个中间数,将数组划分成左右两个部分,左边的均小于或中间数,右边的均大于中间数;然后递归对左右部分进行递归;递归结束是区间只含一个数或者零个数。参考:挖坑+填坑http://blog.csdn.net/morewindows/article/d...
分类:
其他好文 时间:
2014-07-23 11:45:46
阅读次数:
220
插入排序,由第二位开始,一个个往前适当的位置(比左边大,比右边小)插入 1 0 && $ary[$j - 1] > $ary[$j]) {10 11 $tmp = $ary[$j];12 $ary[$j] = $ary[$j - 1];13 $ary...
分类:
Web程序 时间:
2014-07-22 23:32:47
阅读次数:
397