通用排序比较问题

时间:2011-01-16 16:18:11

标签: java

public class GenericSort<G extends Comparable> {
     private G[] integerarray;
     public GenericSort(G[] inputarray){
      this.integerarray = inputarray;
      //check empty array
      if (integerarray ==null || integerarray.length==0){return;}
      quickSort(0,integerarray.length-1);
     }

     public void quickSort(int low, int high){
      int i = low;
      int j = high;
      //set Pivot
      G pivot = integerarray[low + (high-low)/2];
      while(i<=j){
       //check left
       while(integerarray[i]<pivot){i++;}
       //check right
       while(pivot<integerarray[j]){j--;}
       //swap
        if(i<=j){
         G temp = integerarray[i];
         integerarray[i] = integerarray[j];
         integerarray[j] = temp;
         i++;
         j--;
        }
      }
      //recursion
      if(low<j){quickSort(low,j);}
      if(i<high){quickSort(i,high);}
     }
}

这一行:

while(integerarray[i]<pivot) {
    i++;
} & 

while(integerarray[i]<pivot){i++;} 

给出错误,因为未知类型之间不允许发生错误。所以我从可比的范围扩展了G.还是不行。怎么解决?

3 个答案:

答案 0 :(得分:4)

<>仅适用于基元。如果您的类实现了Comparable,请使用它的compareTo方法并将结果与​​0进行比较

答案 1 :(得分:2)

实施Comparable不允许您使用比较运算符&gt;,&lt;,==。它不是C ++,伙计。 :(

相反,您必须使用Comparable接口中定义的compareTo()方法。

还有一个评论。你能否区分两种绝对不同的东西,比如“不工作”和“不编译”。在您的情况下,您无法编译您的代码。当您的代码未编译时,您实际上不必发布如此大的代码段。随着较少的文本和较小的代码片段,您发送更高的机会获得良好的答案。

祝你好运!

PS:检查Collections.sort()作为参考。它完全符合您的目标。

答案 2 :(得分:2)

您无法将对象与&lt;,&gt;等运算符进行比较或==。
Comparable是一个接口,指定方法compareTo(Object o)
Look here