Сортировка массива ссылок - PullRequest
       13

Сортировка массива ссылок

0 голосов
/ 17 февраля 2012

Я пытаюсь отсортировать массив ссылок связанного списка с помощью быстрой сортировки, вот код для быстрой сортировки. Это не работает, так что кто-то может помочь мне с ошибкой.

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);

}

Ответы [ 3 ]

1 голос
/ 17 февраля 2012

связанные списки содержат строки, поэтому мне нужно сравнить первое элемент каждого связанного , чтобы увидеть, больше или меньше его, но я не могу понять это

может ты хочешь этого?

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)
...
0 голосов
/ 17 февраля 2012

Это должно быть LinkedList, а не linkedList, но я полагаю, что проблема не в этом.Вы сравниваете экземпляры Object друг с другом.Вы не можете этого сделать.

От какого типа ваши объекты?Вы должны определить тип явно как LinkedList<Integer>, а затем вы можете написать что-то вроде arr.get(i).compareTo(pivot) < 0

0 голосов
/ 17 февраля 2012

Определены ли операторы < и > для объектов 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().

...