5-30 字符串的冒泡排序 (20分)

来源:互联网 发布:人工智能美女机器人 编辑:程序博客网 时间:2024/06/05 06:33

5-30 字符串的冒泡排序   (20分)

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

输入格式:

输入在第1行中给出NNKK1\le K<N\le 1001K<N100),此后NN行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。

输出格式:

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

输入样例:

6 2bestcateastafreeday

输出样例:

bestacatdayeastfree

思路:

按字典序排序指比较两个字符串大小,先按第一个字母来排, 如果第一个字母相同则按第二个字母来排序,依次比较。

java中的compareto方法,返回参与比较的前后两个字符串的asc码的差值,看下面一组代码
String a="a",b="b";
System.out.println(a.compareto.b);
则输出-1;
若a="a",b="a"则输出0;
若a="b",b="a"则输出1;
 
单个字符这样比较,若字符串比较长呢??
若a="ab",b="b",则输出-1;
若a="abcdef",b="b"则输出-1;
也就是说,如果两个字符串首字母不同,则该方法返回首字母的asc码的差值;
 
如果首字母相同呢??
若a="ab",b="a",输出1;
若a="abcdef",b="a"输出5;
若a="abcdef",b="abc"输出3;
若a="abcdef",b="ace"输出-1;
即参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值,
如果两个字符串不一样长,可以参与比较的字符又完全一样,则返回两个字符串的长度差值

代码:

import java.util.Scanner;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);int a = sc.nextInt();int b = sc.nextInt();String[] s = new String[a];String s1;for (int i = 0; i < a; i++) {s[i] = sc.next();}for (int i = 0; i < b; i++) {for (int j = 0; j < a - 1; j++) {if (s[j].compareTo(s[j+1])>0) {//compareTo按字典序排序s1 = s[j];s[j] = s[j + 1];s[j + 1] = s1;}}}for (int i = 0; i < a; i++) {System.out.println(s[i]);}}}



0 0
原创粉丝点击