Мне нужно отсортировать двусвязный список с помощью алгоритма быстрой сортировки.Используется рекурсия для сортировки.И моя функция разбиения такая же, как мы использовали в массивах.Но я столкнулся с трудностью отслеживания текущего головного узла и хвостового узла в каждом списке.
public void sort() {
Node la = getLast(head);
last = la;
quickSort(head, last);
}
public void quickSort(Node newhead, Node newlast) {
if(newhead == null || newlast == null) {
return;
}
if(newhead == newlast) {
return;
}
Node parti = partition(newhead,newlast);
if(parti != head)
quickSort(newhead, parti.prev);
if(parti != last)
newlast = acualTail;
quickSort(parti.next, newlast);
}
public Node partition(Node newHead, Node newLast) {
//Node actHead = newHead;
//Node acLast = newLast;
Node current = newHead;
Node p = newLast;
while(current != p) {
if(current.data > p.data) {
Node next = current.next;
current.next.prev = current.prev;
if(current.prev != null)
current.prev.next = current.next;
current.next = newLast.next;
current.prev = newLast;
newLast.next = current;
//head = next;
if(current == newHead)
newHead = next;
newLast = current;
current = next;
}
else {
current = current.next;
}
}
head= newHead;
last = newLast;
return p;
}