如何使用Comparator实现冒泡排序?

时间:2011-04-12 22:08:39

标签: java bubble-sort

如何使用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());
 }
}
}

3 个答案:

答案 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接口)。