我們已經知道了将個整數按從小到大排序的冒泡排序法。本題要求将此方法用于字元串序列,并對任意給定的(),輸出掃描完第遍後的中間結果序列。
輸入格式:
輸入在第1行中給出和(),此後行,每行包含一個長度不超過10的、僅由小寫英文字母組成的非空字元串。
輸出格式:
輸入樣例:
6 2
best
cat
east
a
free
day
輸出樣例:
best
a
cat
day
east
free#include<stdio.h>
#include<string.h>
struct cmpStr{
char str[15];//定義字元串
};
struct cmpStr sort[105];//定義結構題數組的大小
int main(){
int n,k;//定義n行,循環k次的變量
scanf("%d%d",&n,&k);
getchar();//吃掉一個回車符
int i=0;//定義一個計數器初始化為0
while(n--){//循環n次依次接收輸入的字元串
gets(sort[i].str);//将輸入的字元串存入到定義的結構體數組中去
i++;//計數器每次加一
}
n=i;//将n的值重新指派回來
i=0;//再次初始化i的值
int j=0;//定義一個内層的循環的計數器,初始話它的值為0
char temp[15];//定義一個零時存放字元串的字元串數組
for(i=0;i<k;i++){//外層循環k次
for(j=0;j<n-1-i;j++){//内層循環n-1次
if(strcmp(sort[j].str,sort[j+1].str)>0){//比較兩個字元串的大小
strcpy(temp,sort[j].str);//這裡要注意的是使用字元串的指派函數才行不能直接使用=
strcpy(sort[j].str,sort[j+1].str);
strcpy(sort[j+1].str,temp);
}
}
}
i=0;//初始化i的值
n--;//最後一個不能有空格
while(n--){
printf("%s\n",sort[i].str);//列印輸出排序之後的字元串
i++;//計數器加一
}
printf("%s",sort[i].str);
return 0;
}