插入排序的算法复杂度为O(n2),但假设序列为正序可提高到O(n),并且直接插入排序算法比較简单,希尔排序利用这两点得到了一种改进后的插入排序。一. 算法描写叙述希尔排序:将无序数组切割为若干个子序列,子序列不是逐段切割的,而是相隔特定的增量的子序列,对各个子序列进行插入排序;然后再选择一个更小.....
分类:
编程语言 时间:
2015-02-04 18:28:19
阅读次数:
177
package?org.rev.algorithm;
/**
?*?选择排序,算法复杂度O(n^2),算法步骤如下:
?*?
?*?1.?对于一组数列,选出最小的数和第一个位置的数交换。
?*?
?*?2.?在剩余的数中,选出最小的数,与第二个位...
分类:
编程语言 时间:
2015-02-03 19:49:15
阅读次数:
194
package?org.rev.algorithm;
/**
?*?归并排序,属于交换排序,时间复杂度为算法复杂度Ο(n?log?n),比快排序慢,但稳定。
?*?
?*?1.?将一个序列递归拆分成多个有序的子序列。
?*?
?*?2.?递归合并...
分类:
编程语言 时间:
2015-02-03 11:26:30
阅读次数:
233
package?org.rev.algorithm;
/**
?*?快速排序?算法复杂度Ο(n?log?n)
?*?
?*?1.挑出一个基准数据。
?*?
?*?2.给数列排序,大于基准数据的放在右边,小于基准数据的放在左边。
?*?
?*?3.递归地...
分类:
编程语言 时间:
2015-01-29 19:43:44
阅读次数:
228
题目描述:给出一个词典,找出所有的复合词,即恰好有两个单词连接而成的单词。输入每行都是一个由小写字母组成的单词。输入已按照字典序从小到大排序,且不超过12000个单词。输出所有的复合词按照字典序从小到大排列。
思路:用set存储所有的单词,对于每个单词,遍历所有可能子单词组合,然后判断在set中是否都已经存储,若是则输出该单词。算法复杂度为O(n*lgn*|S|),其中|S|表示单词最大长度。
...
分类:
其他好文 时间:
2015-01-28 14:44:22
阅读次数:
131
【题目】
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
【分析】
不能用乘除和取模,就只能用加减和位运算。
最简单的方法就是不断的减去被除数。这种方法的迭代次数是结果的大小,即比如结果为n,算法复杂度...
分类:
其他好文 时间:
2015-01-25 11:09:58
阅读次数:
106
声明:这个系列博客是《数据结构与算法分析 C++描述》的读书笔记系列
参考博客:点击打开链接
本文是原书第二章内容,主要内容包括:算法的时间复杂度分析/算法的优化,分析的例子是很出名的最大子序列求和问题。
分为了四种方法来求解:穷举/穷举优化/递归(分治)/联机算法(动态规划), 算法复杂度为O(N^3)/O(N^2)/O(N*logN)/O(N). 思路都在具体代码里
---------...
分类:
编程语言 时间:
2015-01-24 14:31:54
阅读次数:
184
基本思想:二分法的一个前提是序列已经是有序的,然后将待查找值与序列的中点比较。根据比较结果,选择下一步比较的部分。二分查找(binary search)就是一个不断重复这一查找过程,直到找到这个值。算法复杂度:O(lgn)算法实现:一:迭代法int bin_search_iteration(int ...
分类:
编程语言 时间:
2015-01-23 21:23:08
阅读次数:
201
基本原理:比较相邻的元素。每一轮选出一个最大的元素,重复这个过程算法复杂度:O(n2)算法实现:void Bubblesort(int array[],int n){ int temp; for (int j = 0; j != n-1;++j) { for (int...
分类:
编程语言 时间:
2015-01-23 21:20:54
阅读次数:
220
BoyerMoore 字符串搜索算法,返回pat在txt中第一次出现的起始位置,若不存在则返回-1,算法复杂度为O(N), 最坏为O(M*N) (M、N分别为pat与txt的长度)。 1 #include 2 #include 3 #include 4 #include 5 #include...
分类:
编程语言 时间:
2015-01-18 15:35:44
阅读次数:
140