我需要对具有selection sort的数组进行排序.我希望它按特定字符串元素的长度递增顺序对字符串数组进行排序.

它没有提供所需的输出.

String[] a = sc.nextLine().trim().split(" ");
for (int i = 0;i< a.length-1;i++) {
    String min = a[i];
    for (int j = i + 1; j < a.length; j++) {
        if (a[j].length() < min.length()) min = a[j];
    }
    String t = a[i];
    a[i] = min;
    min = t;
}

我试着用 System.out.println(Arrays.toString(a));来观察数组元素

这就是我得到的和我想要的:

On inputting,

Hello Java Its me

Observed Output

me me me me

Expected Output

me Its Java Hello

也就是按照百尺S弦元素的长度来计算.


推荐答案

你没有正确地交换.您需要保存最小元素的索引,并交换a[i]a[minIdx].

        String[] a = sc.nextLine().trim().split(" ");
        for (int i = 0;i< a.length-1;i++) {
            String min = a[i];
            int minIdx = i; // <-- remember min index
            for (int j = i + 1; j < a.length; j++) {
                if (a[j].length() < min.length()) {
                    min = a[j];
                    minIdx = j; // <-- update min index
                }
            }
            String t = a[i];
            a[i] = min;
            a[minIdx] = t; // <-- proper swap
        }

Java相关问答推荐

我们如何直接使用kerminldap服务票证来通过ldap进行身份验证并形成LDAP上下文

屏蔽字母数字代码的Java正则表达式

ApachePOI:不带换行的新行

路径映射未发生

Java Swing:初始化身份验证类后未检测到ATM_Interface键事件

对某一Hyroby控制器禁用@cacheable

连接Quarkus中的两个异步操作

名称冲突具有相同的擦除

如何调整工作时间日历中的时间

带错误BER验证的itext8签名返回pdf

将stringBuilder + forloop转换为stream + map

在缺少字段时使用Jackson With Options生成Optional.Empty()

Java集合:NPE,即使没有添加空值

未调用OnBackPressedCallback-Activitiy立即终止

我们可以在方法中声明接口吗?

在Spring Boot中使用咖啡因进行缓存-根据输出控制缓存

基于距离的APACHE POI公式判断

多线程、并发和睡眠未按预期工作

如何在Selenium上继续使用最新的WebDriver版本

如何在 WebSphere Application Server 内的托管线程上运行 BatchEE 作业(job)?