分析:
初: 6 2 best cat east a free day
第一次: best cat a east day free
第二次: best a cat day east free
由大到小向右边冒泡
结构体法:
#include <stdio.h>
#include <string.h>
struct str{ //定义名为str的结构体
char c[11];
};
void sort(struct str *str,int n,int k);
int main(){
int n,k;
scanf("%d %d",&n,&k);
struct str str[n];
for(int i=0;i<n;i++){
scanf("%s",str[i].c); //不能为gets()函数,否则每次的回车符也被存储
}
sort(str,n,k); //排序函数,str为数组结构,即为指针类型,应该直接传入“str”
for(int i=0;i<n;i++){
puts(str[i].c);
}
return 0;
}
void sort(struct str *str,int n,int k){ //排序后,要对数据修改,因此参数类型为指针类型
char t[11] ={0}; //必须t[11],且初始化0;
//同时不能定义char *t,否则在下面的strcpy中无法实现复制
int r,add=0;
for(int i=n-1;i>0;i--){
for(int j=1;j<=i;j++){
r=strcmp(str[j-1].c,str[j].c);
if(r>0){
strcpy(t,str[j-1].c);
strcpy(str[j-1].c,str[j].c);
strcpy(str[j].c,t);
}
}
add++;
if(add==k)
break;
}
}
二维数组法:(结构体化简版本)
#include <stdio.h>
#include <string.h>
int main(){
int n,k,r,add=0;
char str[100][11]={0},t[11] ={0};
scanf("%d %d",&n,&k);
for(int i=0;i<n;i++)
scanf("%s",str[i]); //不需要加“&”,二维数组中str[i]为指针类型
for(int i=n-1;i>0;i--){
for(int j=1;j<=i;j++){
r=strcmp(str[j-1],str[j]);
if(r>0){
strcpy(t,str[j-1]);
strcpy(str[j-1],str[j]);
strcpy(str[j],t);
}
}
add++;
if(add==k)
break;
}
for(int i=0;i<n;i++)
puts(str[i]);
return 0;
}