美文网首页
Nlog(N)时间复杂度排序链表

Nlog(N)时间复杂度排序链表

作者: cbhe | 来源:发表于2020-05-29 19:13 被阅读0次
class Solution {
    public ListNode sortList(ListNode head) {

        if (head == null || head.next == null){
            return head;
        }

        ListNode newHead = new ListNode(0);
        newHead.next = head;

        quickSort(newHead, null);

        return newHead.next;
    }

    private void quickSort(ListNode head, ListNode tail){

        if (head.next == tail || head.next.next == tail){
            return;
        }

        ListNode firstNode = head.next;

        ListNode pl = firstNode;
        ListNode pr = firstNode;
        ListNode p = firstNode.next;
        int flagVal = firstNode.val;

        for (;p != tail;){
            ListNode pNext = p.next;
            p.next = null;
            if (p.val < flagVal){
                p.next = pl;
                pl = p;
            } else {
                pr.next = p;
                pr = p;
            }
            p = pNext;
        }

        head.next = pl;
        pr.next = tail;

        quickSort(head, firstNode);
        quickSort(firstNode, tail);
    }
}

相关文章

  • c# 快速排序 归并排序

    快速排序 (重要) 分治、递归时间复杂度O(Nlog N) , N是数组的长度 归并排序 (重要) 时间复杂度O...

  • PHP实现快速排序

    快速排序属于交换排序,是一种不稳定排序,平均时间复杂度为O(nlog2^n),最好情况时间复杂度为O(nlog2^...

  • Nlog(N)时间复杂度排序链表

  • 排序算法4-希尔排序

    希尔排序 平均时间复杂度:O(nlogn) 最好情况:O(nlog^2n) 最坏情况:O(nlog^2n) 空间复...

  • JavaScript - 排序算法 - 归并排序

    特点: 时间复杂度:O(nlog2n) 归并排序是稳定的排序算法 原理:(分治法) 原理类似于合并两条有序链表 分...

  • 数据结构之"链表"

    题目: 148. 排序链表 思路:使用快速排序补充:此方法的空间复杂度不是题目所说的O(1),而是O(nlog2n...

  • 排序算法-选择排序

    我们都知道排序算法最好的时间复杂度为O(nlog n),但是很多的排序方法时间复杂度为O(n^2)。那我们为什么要...

  • Leetcode 148 排序链表

    排序链表 题目 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 示例1:输入: 4->...

  • iOS快速排序

    时间复杂度:nlog(n)

  • leetcode第148题:排序链表

    题目描述 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 考点 链表 归并排序 解题思...

网友评论

      本文标题:Nlog(N)时间复杂度排序链表

      本文链接:https://www.haomeiwen.com/subject/rapfzhtx.html