import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* 单链表的快速排序
*
* @author Zg
* @date 2021/8/8 17:57
*/
public class LinkListQuickSort {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
Node node = change(makeRandomList());
printNode(node);
quicksort(node);
printNode(node);
}
}
static List<Integer> makeRandomList() {
Random random = new Random();
int len = random.nextInt(10) + 10;
List<Integer> list = new ArrayList<>(len);
for (int i = 0; i < len; i++) {
list.add(random.nextInt(100));
}
return list;
}
static void quicksort(Node node) {
if (node == null) {
return;
}
quicksort(node, null);
}
static void quicksort(Node low, Node high) {
if (low == high) return;
Node par = partition(low, high);
quicksort(low, par);
quicksort(par.next, high);
}
static Node partition(Node low, Node high) {
int key = low.data;
Node slow = low;
Node quick = low.next;
while (quick != high) {
if (quick.data < key) {
slow = slow.next;
// swap
int temp = quick.data;
quick.data = slow.data;
slow.data = temp;
}
quick = quick.next;
}
// swap
int temp = slow.data;
slow.data = low.data;
low.data = temp;
return slow;
}
static class Node {
int data;
Node next;
public Node() {
}
public Node(int data) {
this.data = data;
}
public Node(int data, Node next) {
this.data = data;
this.next = next;
}
}
static Node change(List<Integer> list) {
Node dummy = new Node(), tail = dummy;
for (Integer val : list) {
tail.next = new Node(val);
tail = tail.next;
}
return dummy.next;
}
static void printNode(Node node) {
if (node == null) {
System.out.println("null");
}
StringBuilder sb = new StringBuilder();
while (node != null) {
sb.append(node.data);
if (node.next != null) {
sb.append(" => ");
}
node = node.next;
}
System.out.println(sb.toString());
}
}