我正在尝试使用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);
}
答案 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