以下是最近学习各种算法的代码实现:#include #include #include #include typedef int EleType;typedef int (*CompFunc)(void *,void *);int IntComp(void * a,void *b){ if(*...
分类:
其他好文 时间:
2014-07-08 00:15:54
阅读次数:
293
上一篇讲到的直接插入排序,时间复杂度O(n^2). 请在脑海里想一下它的过程。如果一个序列本来就是有序的,对它排序的时间复杂度是O(n)。所以当序列基本有序时,插入排序排序的效率大提高,因为减少了移动的动作。
另外,接插入排序还有一个特点,当n比较小时,它的效率比较高。...
分类:
其他好文 时间:
2014-07-04 08:54:11
阅读次数:
302
希尔排序通过比较相距一定间隔的元素来工作,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。所以希尔排序也叫缩小增量排序。希尔排序使用一个序列h1,h2,....,hn,叫做增量序列,只要h1=1,任何增量序列都是可以的,不过有些增量序列比另外一些增量序列更好。在使用增量...
分类:
其他好文 时间:
2014-07-03 20:37:33
阅读次数:
175
//希尔排序在直接插入排序算法中,每次插入一个数,使有序序列仅仅添加1个节点,而且对插入下一个数没有提供不论什么帮助。假设比較相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比較就可能消除多个元素交换。D.L.shell于1959年在以他名字命名的排序算法中实现了这一思想。算法先...
分类:
其他好文 时间:
2014-07-02 17:20:07
阅读次数:
192
排序算法基本陈述容易理解,之后会详细解析希尔排序、堆排序、归并排序、快速排序、简单选择排序、直接插入排序等排序算法。...
分类:
其他好文 时间:
2014-07-01 06:37:39
阅读次数:
188
前面的介绍的三种排序算法,都属于简单排序,大家可以看下具体算法,时间复杂度基本都在0(n^2),这样呢,很多计算机界、数学界的牛人就很不爽了,他们在家里想啊想,吃饭的时候在想,窝粑粑的时候也在想,究竟能不能把时间复杂度搞低点呢。终于,皇天不负有心人啊,王母娘娘显灵了,终于被DL. SHELL这哥们给想出来了。他所创造的希尔(shell)排序是世界上第一个打破0(n^2)的时间复杂度的算法。牛逼不?
好了,言归正传。...
分类:
编程语言 时间:
2014-06-28 07:38:44
阅读次数:
217
//希尔排序
在直接插入排序算法中,每次插入一个数,使有序序列只增加1个节点,并且对插入下一个数没有提供任何帮助。
如果比较相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比较就可能消除多个元素交换。
D.L.shell于1959年在以他名字命名的排序算法中实现了这一思想。算法先将要排序的一组数按某个增量d分成若干组,
每组中记录的下标相差d.对每组中全部元素进行排序,...
分类:
其他好文 时间:
2014-06-27 23:35:51
阅读次数:
340
$\bf(投影定理)$设$M$为$\bf{Hilbert}$空间$X$的闭线性子空间,则对任意$x\in X$,存在唯一的$x_0\in M$,${x_1} \in {M^ \bot }$,使得$x = {x_0} + {x_1}$方法一$\bf(Riesz表示定理)$设$f$为$\bf{Hilbe...
分类:
其他好文 时间:
2014-06-25 13:29:33
阅读次数:
227
插入排序的算法复杂度为O(n2),但假设序列为正序可提高到O(n),并且直接插入排序算法比較简单,希尔排序利用这两点得到了一种改进后的插入排序。一. 算法描写叙述希尔排序:将无序数组切割为若干个子序列,子序列不是逐段切割的,而是相隔特定的增量的子序列,对各个子序列进行插入排序;然后再选择一个更小.....
分类:
其他好文 时间:
2014-06-22 23:28:03
阅读次数:
285
插入排序
包括:直接插入排序,二分插入排序(又称折半插入排序),链表插入排序,希尔排序(又称缩小增量排序)。属于稳定排序的一种(通俗地讲,就是两个相等的数不会交换位置)
。
直接插入排序:
1、算法的伪代码(这样便于理解):
INSERTION-SORT (A, n) A[1 . . n]
for...
分类:
其他好文 时间:
2014-06-22 22:23:22
阅读次数:
218