C++常用算法.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++常用算法.ppt

程序常用算法 最大公约数 查找 排序 方程求解 线性方程组求解 最大公约数 设整数A、B的最大公约数为R,则A、B可表示为A=aR、B=bR,a、b互质。再设AB。令 C = A % B 即 A = qB + C 因A、B均含有R,故C也含有R,设为C=cR。 由A、B、C的关系,有abc。 令:A = B、B = C、C = A%B。如此一直循环到C == 0。这时A为B的倍数,而a与b互质,因而,b == 1,即,B == R。 函数为: int gcb(int a, int b){ int r = a % b; while(r){ a = b; b= r; r = a % b; } return b;} 递归函数为: int gcb(int a, int b){ if(a % b == 0) return b; return gcb(b, a%b); } 查找 查找的对象可以是数值数组,也可以是字符数组。 对数值数组的查找是指:检查数组中是否有指定值的元素;对字符数组的查找是指:检查数组中是否含有给定的字符串。 对数值数组的查找分为顺序查找和有序查找。对字符数组的查找又称为模式匹配算法。 一、顺序查找 方法思路:从数组的第一个元素到最后一个元素,逐个与给定值比较,若相等,就返回元素的下标值加1;当所有元素都不等于给定值,则返回0。 函数为: int findsx(int a[], int n, int x){ int m; for(m=0; mn; m++) if(a[m] == x) return m+1; return 0; } 二、有序查找(折半查找法) 设数组为升序排列,数组元素个数为n。 方法思路:设变量left和right表示当前查找的数组段的左下标值和右下标值,mid表示当前查找的数组段的中间元素的下标值: mid = (right + left) / 2 第一次查找时,left = 0,right = n - 1。 1. 若leftright,数组中没有给定值x,返回0;否则,计算mid,计算a[mid] - x,结果有: 2. 0,函数结束,返回mid + 1。 3. 0,说明x应在数组段[mid + 1, right]中,令left = mid + 1,转1. 4. 0,说明x应在数组段[left, mid - 1]中,令right = mid - 1,转1. 函数为: int findzb(int a[], int n, int x){ int mid, left = 0, right = n-1; while(left = right){ mid = (left + right)/2; if(a[mid] == x) return mid + 1; if(a[mid] x) left = mid + 1; else right = mid – 1;} return 0; } //SFA1.CPP 三、字符数组的模式匹配法 方法思路:设待查找字符数组为s1,模式字符数组为s2,若strlen(s1)strlen(s2),返回NULL。否则:将字符指针p指向s1。 1. 比较从p处开始的长为strlen(s2)的子串是否与s2相符,若相符,返回p;否则: 2. p++,若stelen(p) = strlen(s2),转1. 否则,可确认s2不是s1的子串,返回NULL。 函数为: char *findstr(char *s1, char *s2){ int a = strlen(s1), b = strlen(s2); char *p = s1; if(a b) return NULL; while(strlen(p) = b){ for(a = 0; a b; a++) if(p[a] != s2[a]) break; if(a == b) return p; //找到了 p++;} return NULL;} //SFA2.CPP Findstr函数的应用:将字符串s1中的子串s2删除。 方法思路:用findstr寻找子串的位置,然后将子串后的字符往前移,覆盖掉子串。直到把所有子串都删除。函数: void delstr(char *s1, ch

文档评论(0)

ziyouzizai + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档