给三个字符串,对它们进行排序,之前写过对三个数排序,定义一个中间变量,a,b,c依次比较,如果不是顺序,就用临时变量对它们进行交换。字符串也可以用这样的方法进行排序。
void Sort(const char *a,const char *b,const char *c)//字符串不能被修改,应该用const修饰
{
const char *tmp;//指针变量,用于交换两个指针,中间变量也不能被随意修改,该加const要加上
if(strcmp(a,b)>0)//字符串比较函数,比较字符串a和b的大小,头文件时string.h
{
const char *tmp;//指针变量,用于交换两个指针,中间变量也不能被随意修改,该加const要加上
if(strcmp(a,b)>0)//字符串比较函数,比较字符串a和b的大小,头文件时string.h
{
tmp=a;
a=b;
b=tmp;
}
tmp=a;
a=b;
b=tmp;
}
if(strcmp(a,c)>0)
{
tmp=a;
a=c;
c=tmp;
}
{
tmp=a;
a=c;
c=tmp;
}
if(strcmp(b,c)>0)
{
tmp=b;
b=c;
c=tmp;
}
{
tmp=b;
b=c;
c=tmp;
}
printf("%s %s %s\n",a,b,c); //此时的a,b,c已经有序了
}
}
如果是对很多字符串排序呢,上面的程序显然就不合理了,因为需要比较的字符串太多了。这个不好想的话,我们依然可以类比对数字怎样排序,如果很多数字要进行排序,首先把它们放到一个数组里面,然后在进行排序。排序的方法有很多种,下面要说的是冒泡排序(升序)
给出一组数:9 4 2 7 1
第一次冒泡:4 9 2 7 1
第二次冒泡:4 2 9 7 1
第三次冒泡 :4 2 7 9 1
第四次冒泡:4 2 7 1 9
经过一轮循环,最大的数就冒到了最底下,最后一个数就有序了,然后下一轮就可以不用遍历它了。可以看出如果有五个数,只需要进行4趟比较,有n个数,要进行 n-1 趟比较。 在第 1 趟比较中,要进行4次两两比较,在第 j 趟中要进行 n-j 次两两比较。
void BubbleSort(int *a,int len) //冒泡排序,形参是数组的首元素地址和数组长度
{
for(int i=0;i
{
for(int j=0;j
{
if(a[j]>a[j+1]) //如果前面的数大于后面的数就交换这两个数
{
int tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
}
void Show(int *a,int len) //打印函数,打印出数组现在的数字
{
for(int i=0;i
{
printf("%d ",a[i]);
}
}
{
for(int i=0;i
{
printf("%d ",a[i]);
}
}
既然可以用数组对数字进行排序,也可以用数组对多个字符串进行排序,数组里面保存的是什么呢?
是字符串首元素的地址,这个数组就是指针数组,类型是char * ,所以这个数组的首元素地址就是 char * * p.
void Sort2(char **p,int len) //参数是指针数组首元素的地址和它的长度
{
char *tmp; //定义一个临时的指针变量,用于交换数组元素的内容
for(int i=0;i
{
for(int j=0;j
{
if(strcmp(p[j],p[j+1])>0) //字符串比较函数比较大小
{
tmp=p[j];
p[j]=p[j+1];
p[j+1]=tmp;
}
}
}
}
void Sort2(char **p,int len) //参数是指针数组首元素的地址和它的长度
{
char *tmp; //定义一个临时的指针变量,用于交换数组元素的内容
for(int i=0;i
{
for(int j=0;j
{
if(strcmp(p[j],p[j+1])>0) //字符串比较函数比较大小
{
tmp=p[j];
p[j]=p[j+1];
p[j+1]=tmp;
}
}
}
}
void Show2(char **p,int len) //打印函数,输出指针数组的内容,参数就是这个指针数组的首元素地址
{
for(int i=0;i
{
printf("%s ",p[i]);
}
}
{
for(int i=0;i
{
printf("%s ",p[i]);
}
}
写测试用例
int main()
{
char str1[]="abcd";
char str2[]="aa";
char str3[]="gre";
Sort(str1,str2,str3);
int main()
{
char str1[]="abcd";
char str2[]="aa";
char str3[]="gre";
Sort(str1,str2,str3);
int a[]={2,5,7,3,6,1};
Bubble(a,6);
Show(a,6);
Bubble(a,6);
Show(a,6);
char *b[]={"hbc","aef","dsk","bc"};
Sort2(b,4);
Show2(b,4);
Sort2(b,4);
Show2(b,4);
return 0;
}
}