`
dato0123
  • 浏览: 917904 次
文章分类
社区版块
存档分类
最新评论

C++ Exercises(七)

 
阅读更多
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->#include<iostream>
#include
<string>
#include
<cstdlib>
#include
<ctime>
usingnamespacestd;

template
<typenameT>
voiddeSelSort(Tarr[],intn)
{//双端选择排序
intmin,max;
for(inti=0,j=n-1;i<j;++i,--j)
{
min
=i;
max
=j;
if(arr[min]>arr[max])
{//确保两个端点处有序
MySwap(arr[min],arr[max]);
}

for(intm=i+1;m<j;++m)
{
if(arr[m]>arr[max])
{
max
=m;
}

elseif(arr[m]<arr[min])
{
min
=m;
}

}

//交换最小值和最大值到合适的位置
MySwap(arr[min],arr[i]);
MySwap(arr[max],arr[j]);
}


}

template
<typenameT>
voidbubbleSort(Tarr[],intn)
{//冒泡排序
boolisSwaped;
for(inti=n-1;i>=1;--i)
{
isSwaped
=false;
for(intj=0;j<=i;++j)
{
if(arr[j]>arr[j+1])
{
isSwaped
=true;
MySwap(arr[j],arr[j
+1]);

}

}

if(isSwaped==false)
{//没有交换,停止排序
break;
}

}

}

template
<typenameT>
voidMySwap(T&a,T&b)
{//交换两个值
Ttemp;
temp
=a;
a
=b;
b
=temp;
}

template
<typenameT>
voidprintArray(Tarr[],intn)
{//输出列表
for(inti=0;i<n;++i)
{
cout
<<arr[i]<<'/t';
}

cout
<<endl;
}

boolisPal(conststring&str,intstart,intend)
{//判断是否是回文
if(start>=end-1)
{
returntrue;
}

elseif(str[start]!=str[end-1])
{
returnfalse;
}

else
returnisPal(str,start+1,end-1);
}

voiddec2bin(intn,intlength)
{//输出整数n为固定长度length的进制数字
if(length==1)
{
cout
<<"0";
return;
}

dec2bin(n
/2,length-1);
cout
<<n%2;

}

template
<typenameT>
voidgenerateArray(Tarr[],intn)
{//产生随即数数组

srand((unsigned)time(NULL));
for(inti=0;i<n;++i)
{
arr[i]
=rand()%1000;
}

}

intmain(void)
{
inta[]={8,7,6,5,4,3,2,1};
cout
<<"排序前:";
printArray(a,
8);
deSelSort(a,
8);
//bubbleSort(a,8);
cout<<"排序后:";
printArray(a,
8);
stringstr;
cout
<<"是否是回文";
cin
>>str;
cout
<<isPal(str,0,str.length())<<endl;
intnum,len;
cout
<<"输入数:";
cin
>>num>>len;
dec2bin(num,len);
cout
<<"产生随机数数组:"<<endl;
intb[10];
generateArray(b,
10);
bubbleSort(b,
10);
printArray(b,
10);
return0;
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics