/*************************************************************
题目:使用二级指针对一个指定的字符串数组内的元素按照字母顺序从小到大排列并且输出排序后的情况.字符串数组:char*name[]={Hello,Word,c++,zhang,liang}.
**************************************************************/
#includeiostream
#includestring.h
usingnamespacestd;
voiddisplay(char**p,intcount);//声明打印显示函数
voidSort1(char**p,intcount);//声明一个从小到大的排序函数
voidSort2(char**p,intcount);//声明一个从大到小的排序函数
voidSwap(char**p1,char**p2);//声明一个交换函数
intmain()
{
char*name[]={Hello,Word,c++,zhang,liang};
//未排序前打印显示
display(name,5);
//从小到大排序
coutendl;
Sort1(name,5);
//从小到大排序后打印显示
display(name,5);
coutendl;
Sort2(name,5);
//从大到大排序后打印显示
display(name,5);
system(pause);
return0;
}
voidSort2(char**p,intcount)
{
inti=0,m,j;
while(icount-1)
{
m=i,j=i+1;
while(jcount)
{
if(strcmp(p[j],p[m])0)
{
m=j;
}
j++;
}
if(m!=i)
{
Swap(p[m],p[i]);
}
i++;
}
}
voidSort1(char**p,intcount)
{
inti=0,m,j;
while(icount-1)
{
m=i,j=i+1;
while(jcount)
{
if(strcmp(p[j],p[m])0)
{
m=j;
}
j++;
}
if(m!=i)
{
Swap(p[m],p[i]);
}
i++;
}
}
voidSwap(char**p1,char**p2)
{
char*temp=*p1;
*p1=*p2;
*p2=temp;
}
//打印显示
voiddisplay(char**p,intcount)
{
char*cp=*p;//降级为1级指针
for(inti=0;icount;i++)
{
coutp[i]endl;
}
}
运行结果: