我必须写一个选择排序。这是我想出来的
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/