//将若干字符串按字母顺序输出
#include<stdio.h>
#include<string.h>
int main(){
char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer Design"};
void sortName(char *name[],int n);
void printName(char *name[],int n);
int n=5;
sortName(name,n);
printName(name,n);
}
void sortName(char *name[],int n){
int i,j,k;
char *temp;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++){
if(strcmp(name[k],name[j])>0){
k=j;
}
}
if(k!=i){
temp=name[i];
name[i]=name[k];
name[k]=temp;
}
}
}
void printName(char *name[],int n){
int i;
for(i=0;i<n;i++){
printf("%s\n",name[i]);
}
}
要理解:
指针数组是指一个数组里面的元素是若干个地址,此处就是指一个数组里面装了5个地址,而每一个地址指向的是每一个字符串的首字符的地址。
排序算法思想:
五个元素则一共需要比较四轮,因此i<4(0-3),而j从1开始直到4,i先直接等于k,然后开始一轮的比较,若后面有字符串比第i串小,那么重新将k的值赋值为j,说明的是后面有字符串比第i串小。
之后通过判断可知是否有更小的字符串,如果有,就交换二者的地址。
循环以上几轮后就使得数组的元素越靠前的指向的字符串就越小。
输出字符串:直接%s的形式通过地址的迭代输出。