我必须写一个选择排序。这就是我想出来的
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
答案 0 :(得分:2)
您需要遍历数据的 rest 以找到最小值,而不是 all 数据,即j
应从{{1}开始},而不是i+1
,否则你最终将最小值放入第一个位置,然后将其移动到第二个位置,然后移动到第三个位置,依此类推,使数组完全未排序,除了最小值将位于端。
使用0
可能是错误的(通过函数的名称来判断),因为您将DataManager.getArraySizeExcludingNull(stringArray)
视为最后一个索引,而不是非null的数量值。您只需使用max
和/或适当更改您的功能。