2012-02-17 75 views
-2

我想排序使用快速排序链接列表的引用数组,这里是quicksort的代码。这不起作用,所以有人可以帮我解决这个错误。排序参考数组

public static int partition(linkedList arr[], int left, int right){ 
    int i = left, j = right; 
    linkedList tmp; 
    linkedList pivot = arr[(left + right)/2]; 

    while (i <= j){ 
     while (arr[i] < (pivot)) //getting error bad operand types 
      i++; 

     while (arr[j] > (pivot)) //getting error bad operand types 
      j--; 

     if (i <= j){ 
      tmp = arr[i]; 
      arr[i] = arr[j]; 
      arr[j] = tmp; 
      i++; 
      j--; 
     } 
    }; 

    return i; 
} 

public static void quickSort(linkedList arr[], int left, int right){ 
    int index = partition(arr, left, right); 
    if (left < index-1) 
     quickSort(arr, left, index-1); 

    if (index < right) 
     quickSort(arr, index, right); 

} 
+0

是什么错误说? – Joe 2012-02-17 14:07:00

+3

是{“apple”,“orange”}小于还是大于{“plane”,“car”}?没人知道。您无法将参考文献与'<' and '>'进行比较。 – 2012-02-17 14:08:23

回答

0

是运营商<>linkedList对象定义的?这是错误的原因。

您可以通过简单地用一些比较函数替换<>克服这一点。自己写功能。该函数应以两个对象linkedList作为参数并进行比较,然后返回表示比较结果的值。

这可能是这样的:

int compare(linkedList list1, linkedList list2) 
{ 
    if(list1.get(0) < list2.get(0)) return -1; 
    if(list1.get(0) > list2.get(0)) return 1; 
    return 0; 
} 

然后,只需调用这个函数在partition(),并在从compare()返回的值的决定。

0

它应该是LinkedList不是linkedList,但我想这个问题不在这里。另一个问题是:arr[i] < (pivot)。你正在比较Object的实例。你不能这样做。

从哪个类型是你的对象?你应该定义类型明确像LinkedList<Integer>,然后你可以写类似arr.get(i).compareTo(pivot) < 0

+0

链表中包含的字符串,所以我需要比较每个链接的第一个元素,看看它的大或小,但我不明白这一点 – cdn 2012-02-17 14:11:32

+0

我不明白这一点。你有一系列链接的字符串列表?因为你的条件arr [i] <(pivot)正在比较链表和链表! – adranale 2012-02-17 14:14:48

+0

我有一个数组,其中包含对链接列表的引用。链表本身是字符串。所以如果想要将链表1与链表2比较,我可以比较每个链表中的第一个字符串,以查看哪一个比字母顺序更大/更小?例如。 cat cdn 2012-02-17 14:21:21

1

的链表包含字符串,所以我需要比较链接每个第一 元素,看其更大或更小,但我不能 这个数字出来

也许你想要这个?

Assume 
- you declared your linkedlist with generic like new LinkedList<String>() 
- no null value in lists 

    while (arr[i].get(0).compareTo(pivot.get(0))<=0) 
... 
    while (arr[j].get(0).compareTo(pivot.get(0))>0) 
...