如何使用Comparator实现冒泡排序?
谢谢。
这是我的比较器的样子:
class ColumnSorter implements Comparator {
int colIndex;
ColumnSorter(int colIndex) {
this.colIndex = colIndex;
}
public int compare(Object a, Object b) {
Vector v1 = (Vector) a;
Vector v2 = (Vector) b;
Object o1 = v1.get(colIndex);
Object o2 = v2.get(colIndex);
if (o1 instanceof String && ((String) o1).length() == 0) {
o1 = null;
}
if (o2 instanceof String && ((String) o2).length() == 0) {
o2 = null;
}
if (o1 == null && o2 == null) {
return 0;
} else if (o1 == null) {
return 1;
} else if (o2 == null) {
return -1;
} else if (o1 instanceof Comparable) {
return ((Comparable) o1).compareTo(o2);
} else {
return o1.toString().compareTo(o2.toString());
}
}
}
答案 0 :(得分:3)
您可以像使用<
一样实施冒泡排序。然后,您将<
替换为someComparator.compare(Object o1, Object o2)
。
这是“翻译规则”:
if (arr[i] < arr[j]) {
...
}
变为
if (someComparator.compare(arr[i], arr[j]) < 0) {
...
}
(如果您使用>
,则可以使用> 0
代替< 0
。)
您应该咨询the documentation for Comparator
以获取更多详细信息。这是第一句话:
比较其订单的两个参数。当第一个参数小于,等于或大于第二个参数时,返回负整数,零或正整数。
答案 1 :(得分:1)
我假设你知道如何编写冒泡排序,问题是如何使用比较器。
在冒泡排序的每次迭代中,你必须比较两个项目以决定它们应该在哪个顺序。你会说:
if item1 < item2 then
if( comparator.compare(item1,item2) < 0 ) {
如果您愿意:
if item1 > item2 then
然后你写
if( comparator.compare(item1,item2) > 0 ) {
请注意,<
和>
保持不变,并且您保持项目的顺序相同。如果您遵守该规则,那么比较应该可以正常工作,所以剩下的只是实际的冒泡排序。
答案 2 :(得分:0)
最大的问题是,为什么你本想要自己实施冒泡排序。冒泡排序是最慢的排序算法之一。
在java.util.Collections.sort()
中使用JDK提供的排序算法会更快和保存相当多的代码行。 Collections.sort()
有一个方法需要Comparator
,或者没有使用对象的自然排序的方法(如果它们实现了Comparable
接口)。