2012-02-17 87 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) 
...