以下是Java实现的链表快速排序算法,包含链表节点定义和快速排序实现:
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public class LinkedListQuickSort {
public ListNode sortList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode pivot = head;
ListNode lessHead = new ListNode(0);
ListNode equalHead = new ListNode(0);
ListNode greaterHead = new ListNode(0);
ListNode less = lessHead, equal = equalHead, greater = greaterHead;
ListNode curr = head;
while (curr != null) {
if (curr.val < pivot.val) {
less.next = curr;
less = less.next;
} else if (curr.val == pivot.val) {
equal.next = curr;
equal = equal.next;
} else {
greater.next = curr;
greater = greater.next;
}
curr = curr.next;
}
less.next = equal.next = greater.next = null;
ListNode sortedLess = sortList(lessHead.next);
ListNode sortedGreater = sortList(greaterHead.next);
return concatenate(sortedLess, equalHead.next, sortedGreater);
}
private ListNode concatenate(ListNode less, ListNode equal, ListNode greater) {
ListNode dummy = new ListNode(0);
ListNode tail = dummy;
if (less != null) {
tail.next = less;
tail = getTail(less);
}
if (equal != null) {
tail.next = equal;
tail = getTail(equal);
}
if (greater != null) {
tail.next = greater;
}
return dummy.next;
}
private ListNode getTail(ListNode head) {
while (head.next != null) {
head = head.next;
}
return head;
}
public static void printList(ListNode head) {
while (head != null) {
System.out.print(head.val + " ");
head = head.next;
}
System.out.println();
}
public static void main(String[] args) {
ListNode head = new ListNode(4);
head.next = new ListNode(2);
head.next.next = new ListNode(1);
head.next.next.next = new ListNode(3);
LinkedListQuickSort sorter = new LinkedListQuickSort();
ListNode sorted = sorter.sortList(head);
printList(sorted);
}
}
该实现包含链表节点定义和快速排序算法,通过三路分割(小于/等于/大于基准值)处理链表元素,时间复杂度平均O(n log n),空间复杂度O(log n)递归栈空间。
http://bbs.liyintong.com
http://bbs.naqimai.cn
http://bbs.kucedu.cn
http://bbs.yueluyan.cn
http://bbs.huayuke.cn
http://bbs.haizichu.cn
http://bbs.yawanmei.cn
http://bbs.biaolele.cn
http://bbs.shenhebu.cn
http://bbs.zimeiren.cn
http://bbs.qishouka.cn
http://bbs.ruanding.cn
http://bbs.xjhsdsc.cn
http://bbs.itoren.cn
http://bbs.iseebest.cn
http://bbs.bndaye.cn
http://bbs.rustler.cn
http://bbs.excelta.cn
http://bbs.diaolift.cn
http://bbs.jxpfbyjs.cn
http://bbs.banans.cn
http://bbs.aspira.cn
http://bbs.bxhqw.cn
http://bbs.pudiweng.cn
http://bbs.tingbu.cn
http://bbs.ouhei.cn
http://bbs.huiha.cn
http://bbs.miuling.cn
http://bbs.podang.cn
http://bbs.fenkun.cn
http://bbs.liangran.cn
http://bbs.zouliu.cn
http://bbs.xuhou.cn
http://bbs.kuopao.cn
http://bbs.lunkai.cn
http://bbs.zhaiti.cn
http://bbs.fogei.cn
http://bbs.gengluo.cn
http://bbs.wadiao.cn
http://bbs.hunjun.cn
http://bbs.huanken.cn
http://bbs.chuancong.cn
http://bbs.buzun.cn
http://bbs.zhuozou.cn
http://bbs.lazai.cn
http://bbs.zengle.cn
http://bbs.suidun.cn
http://bbs.zhaojunji.cn
http://bbs.huihuoban.cn
http://bbs.wanjiahua.cn
http://bbs.conglinyi.cn
http://bbs.henyoupin.cn
http://bbs.wuwenkang.cn
http://bbs.tujiachen.cn
http://bbs.zilaoweng.cn
http://bbs.baolema.cn
http://bbs.shumeilin.cn
http://bbs.anhetong.cn
http://bbs.wenjishu.cn
http://bbs.kansande.cn
http://bbs.yueshijie.cn
http://bbs.tihujiu.cn
http://bbs.huatoutou.cn
http://bbs.xiaolaige.cn
http://bbs.huguangu.cn
http://bbs.lvdate.cn
http://bbs.kesini.cn
http://bbs.soubianlu.cn
http://bbs.fuenbu.cn
http://bbs.liuyakun.cn
http://bbs.zouyizou.cn
http://bbs.juyingba.cn
http://bbs.namahu.cn
http://bbs.dadudu.cn
http://bbs.xuewenzi.cn
http://bbs.lazhuyong.cn
http://bbs.aizishu.cn
http://bbs.nianjiepo.cn
http://bbs.baisuijie.cn
http://bbs.wanyuecun.cn
http://bbs.shoupashu.cn
http://bbs.hetongmei.cn
http://bbs.ouenming.cn
http://bbs.qianyiduo.cn
http://bbs.yidingzhi.cn
http://bbs.zouyuming.cn
http://bbs.mofaya.cn
http://bbs.hexiangru.cn
http://bbs.quyouban.cn
http://bbs.mingyinsi.cn
http://bbs.junepan.cn
http://bbs.qiyuehong.cn
http://bbs.ledatong.cn
http://bbs.chenqinga.cn
http://bbs.ebuyun.cn
http://bbs.gayijiu.cn
http://bbs.liqinge.cn
http://bbs.liubawan.cn
http://bbs.huabaohan.cn
http://bbs.aiguandan.cn
http://bbs.judoubang.cn
http://bbs.huachenyu.cn
http://bbs.hexiaolia.cn
http://bbs.feiyuxuan.cn
http://bbs.zhenwasai.cn
http://bbs.maoweilai.cn
http://bbs.yunyuewei.cn
http://bbs.kemensen.cn
http://bbs.anxinyuan.cn
http://bbs.deyisheji.cn
http://bbs.ximaguohe.cn
http://bbs.gewukeji.cn
http://bbs.rehuang.cn