public class ListQuickSort {
public static final int R = 50;
public static void main(String[] args){
int[] arr = new int[]{2,32,78,16,23,5,0,1,17,19,21};
ListNode head = new ListNode(0);
ListNode p = head;
for (int i = 0; i < arr.length; i++) {
ListNode node = new ListNode(arr[i]);
p.next = node;
p = p.next;
}
quickSort(head.next, null);
head = head.next;
while (head != null) {
System.out.print(head);
head = head.next;
}
}
public static class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
@Override
public String toString() {
return val + ", ";
}
}
public static void quickSort(ListNode head, ListNode tail)
{
if (head != tail)
{
ListNode pivot = partition(head, tail);
quickSort(head, pivot);
quickSort(pivot.next, tail);
}
}
private static ListNode partition(ListNode head, ListNode tail) {
ListNode begin = head;
ListNode end = head.next;
//走到末尾才停
while (end != tail)
{
//大于key值时,begin向前走一步,交换begin与end的值
if (end.val < head.val) {
begin = begin.next;
swap(begin,end);
}
end = end.next;
}
//当有序时,不交换p1和key值
if (begin != head) {
swap(begin,head);
}
return begin;
}
private static void swap(ListNode a, ListNode b) {
int tmp = a.val;
a.val = b.val;
b.val = tmp;
}
}
Practice-链表快排
最新推荐文章于 2024-04-30 21:11:36 发布