C++ 常用代码Word格式文档下载.docx
- 文档编号:14416413
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:21
- 大小:23.71KB
C++ 常用代码Word格式文档下载.docx
《C++ 常用代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C++ 常用代码Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
//这两句必不可少哦
}
if(r>
x)qsort(x,r);
//注意此处,尾指针跑到前半部分了
if(h<
y)qsort(h,y);
//注意此处,头指针跑到后半部分了
调用:
qsort(1,n)即可实现数组a中元素有序。
适用于n比较大的排序
二、冒泡排序
voidpaopao(void)//待排序的数据存放在a[1]..a[n]数组中
{for(inti=1;
i<
n;
i++)
//控制循环(冒泡)的次数,n个数,需要n-1次冒泡
for(intj=1;
j<
=n-i;
j++)//相邻的两两比较
if(a[j]<
a[j+1]){inttemp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
或者
for(intj=n-i;
j>
=1;
j--)//相邻的两两比较
paopao(),适用于n比较小的排序
三、桶排序
voidbucketsort(void)//a的取值围已知。
如a<
=cmax。
{memset(tong,0,sizeof(tong));
//桶初始化
for(inti=1;
=n;
i++)//读入n个数
{inta
cin>
a;
tong[a]++;
}//相应的桶号计数器加1
for(inti=1;
=cmax;
i++)
{if(tong[i]>
0)//当桶中装的树大于0,说明i出现过tong[i]次,否则没出现过i
while(tong[i]!
=0)
{tong[i]--;
cout<
<
’‘;
桶排序适用于那些待排序的关键字的值在已知围的排序。
四、合(归)并排序
voidmerge(intl,intm,intr)//合并[l,m]和[m+1,r]两个已经有序的区间
{intb[101];
//借助一个新的数组B,使两个有序的子区间合并成一个有序的区间,b数组的大小要注意
inth,t,k;
k=0;
//用于新数组B的指针
h=l;
t=m+1;
//让h指向第一个区间的第一个元素,t指向第二个区间的第一个元素。
while((h<
=m)&
&
(t<
=r))//在指针h和t没有到区间尾时,把两个区间的元素抄在新数组中
{k++;
//新数组指针加1
if(a[h]<
a[t]){b[k]=a[h];
h++;
}
//抄第一个区间元素到新数组
else{b[k]=a[t];
t++;
//抄第二个区间元素到新数组
}
=m){k++;
b[k]=a[h];
//如果第一个区间没有抄结束,把剩下的抄在新数组中
while(t<
=r){k++;
b[k]=a[t];
//如果第二个区间没有抄结束,把剩下的抄在新数组中
for(into=1;
o<
=k;
o++)//把新数组中的元素,再抄回原来的区间,这两个连续的区间变为有序的区间。
a[l+o-1]=b[o];
voidmergesort(intx,inty)//对区间[x,y]进行二路归并排序
{
intmid;
if(x>
=y)return;
mid=(x+y)/2;
//求[x,y]区间,中间的那个点mid,mid把x,y区间一分为二
mergesort(x,mid);
//对前一段进行二路归并
mergesort(mid+1,y);
//对后一段进行二路归并
merge(x,mid,y);
//把已经有序的前后两段进行合并
归并排序应用了分治思想,把一个大问题,变成两个小问题。
二分是分治的思想。
五、二分查找
intfind(intx,inty,intm)//在[x,y]区间查找关键字等于m的元素下标
{inthead,tail,mid;
head=x;
tail=y;
mid=((x+y)/2);
//取中间元素下标
if(a[mid]==m)returnmid;
//如果中间元素值为m返回中间元素下标mid
if(head>
tail)return0;
//如果x>
y,查找失败,返回0
if(m>
a[mid])
//如果m比中间元素大,在后半区间查找,返回后半区间查找结果
returnfind(mid+1,tail);
else//如果m比中间元素小,在前半区间查找,返回后前区间查找结果
returnfind(head,mid-1);
六、高精度加法
#include<
iostream>
cstring>
usingnamespacestd;
intmain()
stringstr1,str2;
inta[250],b[250],len;
//数组的大小决定了计算的高精度最大位数
inti;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
cin>
str1>
str2;
//输入两个字符串
a[0]=str1.length();
//取得第一个字符串的长度
for(i=1;
=a[0];
//把第一个字符串转换为整数,存放在数组a中
a[i]=str1[a[0]-i]-'
0'
;
b[0]=str2.length();
//取得第二个字符串长度
=b[0];
//把第二个字符串中的每一位转换为整数,存放在数组B中
b[i]=str2[b[0]-i]-'
len=(a[0]>
b[0]?
a[0]:
b[0]);
//取两个字符串最大的长度
=len;
//做按位加法,同时处理进位
{
a[i]+=b[i];
a[i+1]+=a[i]/10;
a[i]%=10;
len++;
//下面是去掉最高位的0,然后输出。
while((a[len]==0)&
(len>
1))len--;
for(i=len;
i>
i--)
cout<
a[i];
return0;
注意:
两个数相加,结果的位数,应该比两个数的那个数多一位。
七、高精度减法
intcompare(strings1,strings2);
if((compare(str1,str2))==0)
//大于等于,做按位减,并处理借位。
{a[i]-=b[i];
if(a[i]<
0){a[i+1]--;
a[i]+=10;
a[0]++;
while((a[a[0]]==0)&
(a[0]>
1))a[0]--;
for(i=a[0];
endl;
}
else
'
-'
//小于就输出负号
//做按位减,大的减小的
{b[i]-=a[i];
if(b[i]<
0){b[i+1]--;
b[i]+=10;
b[0]++;
while((b[b[0]]==0)&
(b[0]>
1))b[0]--;
for(i=b[0];
b[i];
intcompare(strings1,strings2)
//比较字符串(两个数)数字的大小,大于等于返回0,小于返回1。
if(s1.length()>
s2.length())return0;
//先比较长度,哪个字符串长,对应的那个数就大
if(s1.length()<
s2.length())return1;
for(inti=0;
=s1.length();
//长度相同时,就一位一位比较。
if(s1[i]>
s2[i])return0;
if(s1[i]<
s2[i])return1;
//如果长度相同,每一位也一样,就返回0,说明相等
做减法时,首先要判断两个字符串的大小,决定是否输出负号,然后就是按位减法,注意处理借位。
八、高精度乘法
inta[250],b[250],c[500],len;
//250位以的两个数相乘
inti,j;
a[0]=str1.length
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 常用代码 常用 代码
![提示](https://static.bdocx.com/images/bang_tan.gif)