算法和数据结构
smilelance
Do it now!
展开
-
查找字符串里面有没有相同的字符- -
在chinaunix论坛里看到的,真的很精妙:写一个函数fn(),功能是传一个参数是字符串,查找里面有没有相同的字符,有的话返回1,否则0. 两种方法,一是效率最高的,二是最节省内存的.int fn0(const char *str) { char num[256] = {0}; unsigned char *pos = (unsigned char *)str; whi原创 2007-03-27 23:00:00 · 1481 阅读 · 2 评论 -
二分查找算法的C/C++实现
自己随便写的,如果大家有更优化的算法,希望留下评论或链接,非常感谢~~~ int half_search(int num, int arr[], int len){ int start = 0, end = len-1; int index = 0; while(start index = start + (end-start)/2; //不用 (end+start)/2 是为了防原创 2008-07-21 16:57:00 · 2243 阅读 · 0 评论 -
警惕递归
警惕递归 递归是一种解决复杂问题的有效算法,函数通过简化问题求解过程,将被简化的问题再交给一个或多个与自己完成一样的函数,从而让程序解决这个问题。比如说汉诺塔问题。 递归算法思路清晰,编成代码简单优美,缺点是会消耗不少的栈空间,甚至有时候会带来额外的开销。递归所对应的另一种算法是迭代(也就是循环),相应的,迭代的优点是效率高,但是程序可读性方面没有递归好。大部分递归都可以方便的用迭原创 2008-09-10 16:26:00 · 725 阅读 · 0 评论 -
螺旋队列算法详解
/* 螺旋队列 设1的坐标是(0,0),的方向向右为正,y方向向下为正,例如,7的坐标为(-1,-1),2的坐标为(0,1)。 编程实现输入任意一点坐标(x,y),输出所对应的数字。 43 44 45 46 47 48 49 42 21 22 23 24 25 26 41 20 7 8 9 10 27 40 19 6 1 2 11 28原创 2008-12-06 19:35:00 · 3975 阅读 · 4 评论 -
算法的时间复杂度详解
一般情况下,算法中基本操作重复执行的次数是问题规模 n 的某个函数 f(n) 算法的时间度量记作 T(n) = O(f(n)),他表示随着问题规模n增大,算法执行时间的增长率和 f(n) 的增长率相同,乘坐算法的渐进时间复杂度(Asymptotic Time Complexity),简称时间复杂度。 算法时间复杂度从小到大依次是: O(1) 2) 3) n) n)原创 2012-06-25 17:41:13 · 2403 阅读 · 0 评论 -
已知两圆圆心坐标及半径求两圆交点 (C语言|参数方程求解)
已知两圆圆心坐标及半径求两圆交点 (C语言|参数方程求解) 在一个二维平面上给定两个圆的圆心横纵坐标、半径共6个参数, 求交点. 这个问题无非是解二元二次方程组.普通二元二次方程联立消元求解的困难在于, 中间过程里的系数会变得非常复杂, 从而导致容易出错---因为公式毕竟还是要人来推导,人的出错率比计算机要高得多得多---改用圆的参数方程求解, 可以在显著地减轻这个负担. 现转载 2009-09-30 11:33:00 · 16140 阅读 · 3 评论 -
链表算法大全
1、给定单链表,检测是否有环。使用两个指针p1,p2从链表头开始遍历,p1每次前进一步,p2每次前进两步。如果p2到达链表尾部,说明无环,否则p1、p2必然会在某个时刻相遇(p1==p2),从而检测到链表中有环。2、如果单链表有环,找到环节点。第一步,先按照上一题让p1和p2相遇,则相遇的点必然在环里。假设链表起点到环节点距离为l,环节点到p1,p2相遇点的原创 2012-07-18 22:57:00 · 1161 阅读 · 0 评论