Practice-链表快排

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;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值