2012-02-17 3 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

+3

Есть {"яблоко", "оранжевое"} меньше или больше, чем {"самолет", "автомобиль"}? Никто не знает. Вы не можете сравнивать ссылки с '<' and '>'. –

ответ

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

+0

Я не понимаю. у вас есть массив связанных списков строк? потому что ваше условие arr [i] <(pivot) сравнивает связанный список со связанным списком! – adranale

+0

У меня есть массив, содержащий ссылки на связанные списки. Связанные списки сами по себе являются строками. поэтому, если вы хотите сравнить связанный список 1 со связанным списком 2, я могу сравнить первую строку из каждого, чтобы увидеть, какой из них больше/меньше, чем в алфавитном порядке? например. cat cdn

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) 
... 
Смежные вопросы