这是一个奇怪且低效的实现,您可以比较彼此之间的每个数字.像这样的东西更直观(可以稍微提高性能,但这不是重点,你只需节省大量时间而不会意外地使用索引犯错误,如果你真的关心性能而不是可读性使用像Java那样进行mergesort或quicksort [Java正在使用基本类型的快速排序和对象的mergesort,可能因为对于基本类型,如果算法是否稳定则无关紧要]):
public void bubbleSort(int[] arr) {
boolean change;
do {
change = false;
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
change = true;
}
}
} while (change);
}
应用于您的代码(升序排序):
boolean change;
do {
change = false;
for (int i = 0; i < list.size() - 1; i++) {
c = list.get(i);
d = list.get(i + 1);
a = c.getLastName();
b = d.getLastName();
// add special comparison for null values if a or b can be null ("" is ok)
// toLowerCase() is to compare case-insensitive ('a' != 'A')
if (a.toLowerCase().compareTo(b.toLowerCase()) > 0) {
list.set(i, d);
list.set(i + 1, c);
change = true;
}
}
} while (change);
旁注:s.toUpperCase().compareTo(s.toLowerCase())== 0如果s仅包含符号,则为true.