为什么我的选择排序不显示正确排序的数组?

时间:2014-03-26 01:17:42

标签: 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个名字的列表(我已经检查过max的大小是45,每个索引都是一个字符串)。该方法似乎将数组分成两半,按字典顺序排列为2个部分?这是我的输出。

 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

1 个答案:

答案 0 :(得分:2)

您需要遍历数据的 rest 以找到最小值,而不是 all 数据,即j应从{{1}开始},而不是i+1,否则你最终将最小值放入第一个位置,然后将其移动到第二个位置,然后移动到第三个位置,依此类推,使数组完全未排序,除了最小值将位于端。

使用0可能是错误的(通过函数的名称来判断),因为您将DataManager.getArraySizeExcludingNull(stringArray)视为最后一个索引,而不是非null的数量值。您只需使用max和/或适当更改您的功能。