排序参考数组

时间:2012-02-17 14:04:40

标签: java arrays list sorting linked-list

我正在尝试使用quicksort对链表的引用数组进行排序,这里是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);

}

3 个答案:

答案 0 :(得分: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)
...

答案 1 :(得分: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()返回的值做出决定。

答案 2 :(得分:0)

它应该是LinkedList而不是linkedList,但我想问题不在这里。

另一个问题是:arr[i] < (pivot)。您正在将Object的实例进行比较。你不能这样做。

您的对象来自哪种类型?您应该明确定义类型LinkedList<Integer>,然后您可以编写类似arr.get(i).compareTo(pivot) < 0

的内容