Java冒泡排序无法对字符串数组按字母序排序,该如何修复代码?
Java冒泡排序代码修复说明
存在的问题
- 语法逻辑错误:if判断后未添加花括号,仅
tempmemory = name[j];受条件控制,后续两行元素交换代码无论判断结果是否成立都会执行,直接破坏数组元素顺序。 - 排序规则错误:
String类的compareTo方法返回值小于0时,代表调用方法的字符串字典序小于被比较的字符串。如果需要实现a到z的升序排序,此时不需要交换元素,应该在返回值大于0时才触发交换操作。 - 可优化点:冒泡排序每一轮都会将当前未排序区间的最大元素移动到区间末尾,内层循环可以逐轮减少遍历次数,避免重复比较已经排好序的末尾元素。
修复后的完整代码
public class Main { public static void bubblesort (String[] name) { String tempmemory; // 外层循环控制排序轮数 for (int i = 0; i < name.length; i++) { // 内层循环每次只遍历未排序的部分 for (int j = 0; j < (name.length - 1 - i); j++) { // 前一个元素字典序更大时才交换,实现升序排序 if (name[j].compareTo(name[j + 1]) > 0) { tempmemory = name[j]; name[j] = name[j + 1]; name[j + 1] = tempmemory; } } } } public static void main (String[] args) { String[] name = {"ciku", "eman","aina"} ; int i=0; System.out.println("Before sort : "); while (i < name.length) { System.out.print(name[i] + " "); i++; } bubblesort(name); i=0; System.out.println("\nAfter sort : "); while (i < name.length) { System.out.print(name[i] + " "); i++; } } }
运行效果
修复后代码输出为:
Before sort : ciku eman aina After sort : aina ciku eman
符合字母升序排序的预期。
内容的提问来源于stack exchange,提问作者naddy
相关产品推荐
相关产品推荐

