![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 73
ying847782627
这个作者很懒,什么都没留下…
展开
-
旋转数组中的最小数字
旋转数组中的最小数字:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如:数组 {3,4,5,1,2} 为 {1,2,3,4,5} 的一个旋转,该数组的最小值为1.直观的解法:从头到尾遍历数组一次,我们就能找到最小的元素,时间复杂度为O(n)。利用旋转数组的特性:1.旋转数组划分为两个排序的子数组,而且前原创 2016-03-29 20:59:34 · 844 阅读 · 0 评论 -
动态规划
动态规划通常用来解决最优化问题,在这类问题中,我们通过做出一组选择来达到最优解。在作出每个选择的同时,通常会生成与原问题形式相同的子问题。当多于一个选择子集都生成相同的子问题时,动态规划技术就会很有效,起关键技术就是对每一个这样的子问题都保存其解,当其出现重复即可避免重复求解。 动态规划与分治方法很像,都是通过组合子问题的解来求解原问题。分治方法:将问题划分为互不相交的子问题,递归的原创 2016-05-21 16:09:55 · 536 阅读 · 0 评论 -
堆排序
1.堆1.堆的基本性质及操作 2.堆的维护 3.建堆 4堆排序 C-算法-堆的基本操作-时间复杂度-堆排序完整源码堆排序集合了归并排序的优点:时间复杂度位O(nlgn) 插入排序的优点:具有空间原址性(任何时候只需要常数个额外的元素空间存储临时数据) 堆是一个数组,可以被看成是一个近似的完全二叉树。堆上的每个节点对应数组中的一个元素。除了最底层外,该树是完全充满的。这样给定一个结点的下标 i,我们很容易计算得到原创 2016-03-28 20:24:37 · 523 阅读 · 0 评论 -
比较排序算法
比较排序:在排序的最终结果中,各元素的次序依赖于他们之间的比较。我们把这类算法称为比较排序。比较排序的下界 在一个比较排序算法中,我们只使用元素间的比较来获得输入序列中的元素间次序信息。也就是说,给定两个元素ai, aj ,可以执行aiaiai=aj、ai>aj、ai>=aj中的比较操作来确定他们之间的相对次序。我们不能使用其他方法观察元素的值或者他们之间次序的原创 2016-04-11 15:07:59 · 634 阅读 · 0 评论 -
渐进符号
大写O符号f(n)=O(g(n)),这里f(n)是分析出来算法的执行次数的函数,O的定义:当且仅当存在正的常数c和n0,使得对于所有的n>=n0,有f(n)这里cg(n)就是函数f(n)的上限。几种函数的例子:1.线性函数f(n)=3n+2,当n>=2时,3n+22.平方函数f(原创 2016-04-08 18:05:07 · 2734 阅读 · 0 评论 -
计数排序
计数排序假设n个输入元素中的每一个都是在0到k区间内的一个整数,其中k为某个整数。计数排序的基本思想是:对每一个输入元素x,确定小于x的元素的个数。利用这一信息就可以把x直接放在它的输出数组中的位置上。在计数排序中,假设输入是一个数组A[1..n],A.length=n。我们还需要两个数组:B[1..n]存放排序的输出,C[0..k]提供存储空间。COUNTIN原创 2016-04-08 10:25:23 · 461 阅读 · 0 评论 -
替换空格 合并数组字符串
把字符串中的每个空格换成“%20”。注意:如果在原来的字符串上做替换,要保证字符串最后有足够的空余内存直接的解法:时间复杂度为O(n^2)从头到尾扫描字符串,每次碰到空格的时候做替换。由于是把一个字符换成三个字符,必须把空格后面的所有字符都向后移动两个字节,否则就有两个字符被覆盖了。效率不高的原因是很多字符都移动了很多次,所以应该减少移动次数。从原创 2016-04-03 13:06:25 · 736 阅读 · 0 评论 -
Fibonacci(斐波那契)序列的递归和非递归
Fibonacci(斐波那契)序列的递归和非递归写一个函数,输入n,求斐波那契数列的第n项:// ====================方法1:递归====================long long Fibonacci_Solution1(unsigned int n){ if(n <= 0) return 0; if(n == 1)原创 2016-04-01 16:34:53 · 2241 阅读 · 0 评论 -
快速排序改进
快速排序平均复杂度为O(nlgn),最坏情况为O(n^2),即数组已经有序或大致有序的情况下,每次划分只能减少一个元素,快速排序将不幸退化为冒泡排序,所以快速排序时间复杂度下界为O(nlogn),最坏情况下为O(n^2)1.如果在排序时选取最后一个元素为基准,则可以通过以下方法来避免划分的不平衡。int Patition(int *pnArr, int nLeft, int nRigh原创 2016-03-30 22:05:01 · 1036 阅读 · 0 评论