![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Algorithm/Data Structure
文章平均质量分 60
subo86
这个作者很懒,什么都没留下…
展开
-
经典排序算法-C实现
PART (1)/*===============================================经典排序思想,并用C语言指针实现排序算法================================================*/ /*==================================================================转载 2009-01-21 09:51:00 · 2808 阅读 · 0 评论 -
排序算法总结
shell 排序算法总结Latest Snippet Version: 1.01/** Shell 排序算法在 1959 年由 D. Shell 发明。* 也称为递减增量排序算法,各种实现在如何进行递减上有所不同。* 不稳定,不需要辅助空间。*//** Gonnet 算法,发表于 1991 年。*/int shellsortGo(int p[],int n){int op=0;int转载 2009-11-26 16:11:00 · 858 阅读 · 0 评论 -
ACM算法书籍
我常感叹到,学计算机的人是幸福的,因为在这个领域中有如此多的通俗易懂(相对来说)的经典好书,你需要做的只是坚持把它们一本一本读下去而已。学力学就没有这样的好事了(抱怨一下),除了论文就是论文,满篇公式,晦涩坚深,真不是给人看的(虽然我也没看过几篇)。在这里列出一些我看过或者准备看的算法书籍,以供参考。1. CLRS 算法导论算法百科全书,只做了前面十几章的习题,便感觉受益转载 2009-11-16 11:25:00 · 1240 阅读 · 1 评论 -
二进制数反转
(1)使用了归并排序的思路(最快)但是时间复杂度比归并排序要小,每行代码都相当于完成了一次归并#include unsigned RevBit(unsigned x) { x=(x&0x55555555)>1)&0x55555555; x=(x&0x33333333)>2)&0x33333333; x原创 2009-10-28 18:37:00 · 4013 阅读 · 0 评论 -
蚂蚁爬杆
有一根27厘米长的细木杆,在第3厘米,7厘米,11厘米,17厘米,23厘米这五个位置上各有一只蚂蚁,木杆很细,不能同时通过两只蚂蚁,开始时,蚂蚁的头朝向左还是右是任意的,它们只会朝前走或掉头,但不会后退,当任意两只蚂蚁相遇后,蚂蚁会同时掉头朝反方向走,假设蚂蚁们每秒钟可以走1厘米的距离。编写程序(C/C++),求所有蚂蚁都离开木杆的最小时间和最大时间。(百度面试题) 问题分析转载 2009-10-27 10:48:00 · 1127 阅读 · 2 评论 -
整数互换
问题描述: 在不申请新内存的情况下,将两个整数互换。算法:(1) 算术运算 (arithmetic operation) void exchange(int x,int y){ x=x+y; y=x-y; x=x-y; }(2) 位运算 (bit arithmetic operatio原创 2009-10-27 23:35:00 · 559 阅读 · 0 评论 -
欧几里德——最大公约数
Euclid,欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:定理:gcd(a,b) = gcd(b,a mod b)证明:a可以表示成a = kb + r,则r = a mod b假设d是a,b的一个公约数,则有d|a, d|b,而r = a - kb,因此d|r因此d是(b,a mod b)的公约数原创 2009-10-27 09:47:00 · 717 阅读 · 0 评论 -
回文数(palindromic number)
判断回文数 (palindromic number)int main(void) { int n,m=0,temp; scanf("%d",&n); temp=n; while(temp) { m=m*10+temp%10; temp/=10; }原创 2009-10-27 23:48:00 · 582 阅读 · 0 评论 -
strstr的实现
函数名: strstr 功 能: 在串中查找指定字符串的第一次出现 用 法: char *strstr(char *str1, char *str2); 程序例: char* strstr ( const char * str1, const char * str2 ){char *cp = (char *) str1;//cast const ->variablechar原创 2009-10-27 23:29:00 · 604 阅读 · 0 评论 -
异或(^)运算的妙用
现有1,1,2,2,3,3,....,n,n共2n个数,其中各个数字排列的顺序是任意的,是杂乱放的,即没有排序。现在删除了其中的一个数剩下了2n-1个数,求删除的那个数?可能大多数人的第一想法是:用2n个数的总和(n*(n+1))减去2n-1个数的总和,不错,想法是正确的。但是,放在计算机中考虑的话,此方法就不太可行了,先不考虑算法效率的问题,主要是因为2n个数的总和不知道具体有多转载 2009-10-27 11:00:00 · 876 阅读 · 0 评论 -
约瑟夫环
算法描述: 有编号从1到N的N个人坐成一圈报数,报到M的人出局,下一位再从1开始, 如此持续,直止剩下一位为止,报告此人的编号X。输入N,M,求出X。下面给出两种解法,前面的是比较常规的解法,比较适合“名门正派”,而后面一种则非常巧妙…… (1)数学解法(递推):(参考:http://www.cnblogs.com/woodfish1988/archive/2007/02/18/652原创 2009-10-26 12:18:00 · 828 阅读 · 0 评论 -
直线划分平面问题
问题描述: n条直线最多能划分出多少个平面?问题分析: 平面上只要多出现一条直线,就能至少多把平面分出一部分,而若此直线与其他直线有n个交点,就再能把平面多分出n个部分,因此若想把平面划分的部分最多,新添入的直线必须与前k条直线交k个点,即第二条直线要与第一条直线交1个点,第三条要与前两条交2个点,……,第1999条与前1998条交1998个点,这样,第二条直线原创 2009-10-23 10:45:00 · 2567 阅读 · 0 评论 -
N个数中选出最大(小)的n个数
一道经典的面试题:如何从N个数中选出最大(小)的n个数?这个问题我前前后后考虑了有快一年了,也和不少人讨论过。据我得到的消息,Google和微软都面过这道题。这道题可能很多人都听说过,或者知道答案(所谓的“堆”),不过我想把我的答案写出来。我的分析也许存有漏洞,以交流为目的。但这是一个满复杂的问题,蛮有趣的。看完本文,也许会启发你一些没有想过的解决方案(我一直认为堆也许不是最高效的转载 2009-10-12 12:12:00 · 1749 阅读 · 0 评论 -
带重复数字的全排列
一道又重复数字的全排列的问题,用set保存,然后直接回溯。这这种做法,效率比较低,没有去剪枝,从而像1,1,1,1,1这样的序列都需要回溯很多次。今天写了一个剪枝的。 Java代码 public class Permutation { private int[] a; public Permutation(i转载 2009-05-21 14:50:00 · 1104 阅读 · 0 评论 -
搜索算法的剪枝优化(Google笔试题)
这个题目的英文原题是: Consider a function which, for a given whole number n, returns the number of ones required when writing out all numbers between 0 and n.For example, f(13)=6. Notice that f(1)转载 2009-05-21 14:32:00 · 1006 阅读 · 0 评论 -
大数/高精度加减乘除取模[收藏]
Cpp代码 #include #include using namespace std; inline int compare(string str1, string str2) { if(str1.size() > str2.size()) //长度长的整数大于长度小的整数 r转载 2009-05-21 14:01:00 · 1030 阅读 · 0 评论 -
容器元素旋转
<br /><br />问题描述:<br />将[First, Middle) 内的元素和 [Middle, Last) 内的元素交换。<br /> <br />算法分析:<br />(1)旋转——辗转相除法<br />First = A, Middle = D, Last = H<br />Case: A B C D E F G H<br />Step: D->A,G->D, B->G,原创 2010-08-11 23:59:00 · 705 阅读 · 0 评论