java - 为什么我的选择排序没有显示正确排序的数组?

标签 java algorithm sorting selection-sort

我必须写一个选择排序。这是我想出来的

     public static void sortString(String[] stringArray) {
    int max = DataManager.getArraySizeExcludingNull(stringArray), smallest = 0;
    String temp;
    for (int i = 0; i < max; i++) {

        smallest = i;

        for (int j = 0; j < max; j++) {

            if (stringArray[j].compareTo(stringArray[smallest]) < 0) {

                smallest = j;
            }

        }

        temp = stringArray[i];
        stringArray[i] = stringArray[smallest];
        stringArray[smallest] = temp;

    }
}

我有一个包含 45 个名称的列表(我检查过最大值的大小为 45,并且每个索引都是一个字符串)。该方法似乎将数组分成两半,按照字典顺序正确的顺序分成两部分?这是我的输出。

 Kate

 Leroy

 Nicola

 Nancy

 Oprah

 Peter

 Quinton

 Richard

 Kelly

 Sven

 Theo

 Terry

 Violet

 Wilma

 Zed

 Allan

 Bob

 Steve

 Nigel

 Neil

 Fred

 Sally

 Glenn

 Gary

 Heather

 Horatio

 Ivan

 Ingrid

 Susy

 Lindsay

 Mitch

 Shelly

 David

 Kirsten

 Sarah

 Janet

 Barbra

 Carrie

 Jacob

 Elenor

 Evan

 John

 Mike

 Josh

Aaron

最佳答案

您需要遍历数据的其余 以找到最小值,而不是所有 数据,即j 应该从i+1,而不是0,否则你只是把最小值放到第一个位置,然后把它移到第二个,然后是第三个,依此类推,留下数组完全未排序,除了最小值将在末尾。

对于这个问题,使用 DataManager.getArraySizeExcludingNull(stringArray) 可能是错误的(根据函数名称判断),因为您将 max 视为最后一个索引,而不是非空值的数量。您只需使用 stringArray.length 和/或适本地更改您的函数。

关于java - 为什么我的选择排序没有显示正确排序的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22649659/

相关文章:

c++ - 用仿函数错误排序

c# - 是否可以对哈希表进行排序?

java - 在 AWS Credentials Provider 中使用标准配置文件名称?

java - IntelliJ : cannot resolve symbol "setVisible"

java - 什么消耗更少,使用ArrayList或System.arraycopy

java - 如何告诉 gson 在 Java 中将哪些字段添加到 json 中?

algorithm - 什么是 O(log*N)?

algorithm - 计算两组k维向量最小距离的快速方法

c - 对数时间并行减少

Java:允许重复的排序列表/集合