1、常用算法经典代码(C+版) 一、快速排序void qsort(int x,int y) /待排序的数据存放在 a1.an数组中int h=x,r=y;int m=a(x+y)1; /取中间的那个位置的值while(hm) r-; /比中间那个位置的值大,循环直到找一个比中间那个值小的if(hx) qsort(x,r);/注意此处,尾指针跑到前半部分了if(h=1;j-) /相邻的两两比较if(aja;tonga+;/相应的桶号计数器加 1for(int i=1;i0) /当桶中装的树大于 0,说明 i 出现过 tongi次,否则没出现过 iwhile (tongi!=0)tongi-;cout
2、=y) return;mid=(x+y)/2;/求x,y 区间,中间的那个点 mid,mid 把 x,y 区间一分为二mergesort(x,mid);/对前一段进行二路归并mergesort(mid+1,y);/对后一段进行二路归并merge(x,mid,y);/把已经有序的前后两段进行合并归并排序应用了分治思想,把一个大问题,变成两个小问题。二分是分治的思想。五、二分查找int find(int x,int y,int m) /在x,y区间查找关键字等于 m 的元素下标 int head,tail,mid;head=x;tail=y;mid=(x+y)/2);/取中间元素下标if(amid
3、=m) return mid;/如果中间元素值为 m 返回中间元素下标 midif(headtail) return 0;/如果 xy,查找失败,返回 0if(mamid) /如果 m 比中间元素大,在后半区间查找,返回后半区间查找结果return find(mid+1,tail);else /如果 m 比中间元素小,在前半区间查找,返回后前区间查找结果return find(head,mid-1);六、高精度加法#include#includeusing namespace std;int main()string str1,str2;int a250,b250,len; /数组的大小决定了
4、计算的高精度最大位数int i;memset(a,0,sizeof(a);memset(b,0,sizeof(b);cinstr1str2; /输入两个字符串a0=str1.length(); /取得第一个字符串的长度for(i=1;ib0?a0:b0); /取两个字符串最大的长度for(i=1;i1) len-;for(i=len;i=1;i-)coutusing namespace std;int compare(string s1,string s2);int main()string str1,str2;int a250,b250,len;int i;memset(a,0,sizeof
5、(a);memset(b,0,sizeof(b);cinstr1str2;a0=str1.length();for(i=1;i1) a0-;for(i=a0;i=1;i-)cout1) b0-;for(i=b0;i=1;i-)couts2.length() return 0; /先比较长度,哪个字符串长,对应的那个数就大if(s1.length()s2i) return 0;if(s1i#includeusing namespace std;int main()string str1,str2;int a250,b250,c500,len; /250 位以内的两个数相乘int i,j;mems
6、et(a,0,sizeof(a);memset(b,0,sizeof(b);cinstr1str2;a0=str1.length();for(i=1;i1) len-; /为什么此处要 len1?for(i=len;i=1;i-)cout#includeusing namespace std;void num1(int s,string st1);int a2501,b2501,c5002;/此处可以进行 2500 位万进制乘法,即 10000 位十进制乘法。Int main() string str1,str2;int len;cinstr1str2;memset(a,0,sizeof(a)
7、;memset(b,0,sizeof(b);memset(c,0,sizeof(c);num1(a,str1); /把 str1 从最低位开始,每 4 位存放在数组 a 中num1(b,str2); /把 str2 从最低位开始,每 4 位存放在数组 b 中for(int i=1;i1) len-;/去掉高位的 0,并输出最高位cout=1;i-)/把剩下来的每一位还原成 4 位输出if (ci=0;i-) /从最低位开始,处理每一位 if (count%4=0) sk+=(st1i-0)*1000; if(i!=0) k+;if (count%4=1) sk=(st1i-0);if (count%4=2) sk+=(st1i-0)*10;if (count%4=3) sk+=(st1i-0)*100;count+;s0=k; /存放数组的位数,就是按 4 位处理后的万进制数的位数。 Return;九、高精度除法(没讲)十、筛选法建立素数表