我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(<_N_),输出扫描完第_K_遍后的中间结果序列。

输入格式:

输入在第1行中给出NK(1≤K<_N_≤100),此后_N_行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。

输出格式:

输出冒泡排序法扫描完第K遍后的中间结果序列,每行包含一个字符串。

输入样例:

  1. 6 2
  2. best
  3. cat
  4. east
  5. a
  6. free
  7. day

输出样例:

  1. best
  2. a
  3. cat
  4. day
  5. east
  6. free
  1. #include<stdio.h>
  2. #include<string.h>
  3. //使用strcmp()函数进行大小的比较
  4. //使用strcpy()函数进行字符串的复制以实现位置交换
  5. int main(){
  6. char s[101][11], tep[11];//tep[]为临时
  7. int n, k, i, j;
  8. scanf("%d %d", &n, &k);
  9. for(i=0; i<n; i++)
  10. scanf("%s", &s[i]);
  11. for(i=0; i<k; i++){
  12. for(j=0; j<n-1-i; j++){//①在倒数第二位的时候就得终止 ②根据冒泡规则每经过一轮排序,就可以少排最末尾的一个
  13. if(strcmp(s[j], s[j+1])>0){
  14. strcpy(tep, s[j+1]);
  15. strcpy(s[j+1], s[j]);
  16. strcpy(s[j], tep);
  17. }
  18. }
  19. }
  20. for(i=0; i<n; i++)
  21. printf("%s\n", s[i]);
  22. return 0;
  23. }