java编写链表快速排序算法。

以下是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

请使用浏览器的分享功能分享到微信等