• Leetcode148-Sort_List


    Sort_List

    在LeetCode 里面,因为只有归并排序的时间复杂度为O(1),所以快速排序用不了,前面两个都没用直接看最后一个归并排序。

    冒泡排序(超时了)

    public ListNode sortList(ListNode head) {
            
            if(null == head)
                return head;
            
            int counter = 0;
            ListNode current = head;
            while (null != current.next) {
                current = current.next;
                counter++;
            }
    
            current = head;
            int pre;
            while (counter > 0) {
                for (int i = 0; i < counter; i++) {
                    if (current.val > current.next.val) {
                        pre = current.val;
                        current.val = current.next.val;
                        current.next.val = pre;
                    }
                    current = current.next;
                }
                current = head;
                counter--;
            }
            return head;
            
        }
    

      

    快速排序(在leetcode 上面还是超时间了)

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode sortList(ListNode head) {        
            quickSort(head, null);
            return head;
            
        }
        public static ListNode quickSort(ListNode head, ListNode end) {
            if (head != end) {
    
                ListNode p1 = head;
                ListNode p2 = head.next;
    
                //走到末尾才停
                while (p2 != null) {
    
                    //大于key值时,p1向前走一步,交换p1与p2的值
                    if ((p2.val < head.val) && (p1 != p2)) {
                        p1 = p1.next;
                        int temp = p1.val;
                        p1.val = p2.val;
                        p2.val = temp;
                    }
                    p2 = p2.next;
                }
    
                //当有序时,不交换p1和key值
                if (p1 != head) {
                    int temp = p1.val;
                    p1.val = head.val;
                    head.val = temp;
                }
                quickSort(head, p1);
                quickSort(p1.next, null);
                return p1;
    
            }
            return head;
        }
    }
    

      

    归并排序

    思路:https://blog.csdn.net/mine_song/article/details/69831827 

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode sortList(ListNode head) {
            
             if (null == head || null == head.next) {
                return head;
            }
            ListNode mid = getMidNode(head);
            ListNode right = mid.next;
            mid.next = null;
            return mergeSort(sortList(head), sortList(right));
            
        }
    
        static ListNode getMidNode(ListNode node) {
    
            ListNode fast = node;
            ListNode slow = node;
    
            while (null != fast.next && null != fast.next.next) {
                fast = fast.next.next;
                slow = slow.next;
            }
            return slow;
        }
    
     static ListNode mergeSort(ListNode head1, ListNode head2) {
    
            ListNode p1 = head1;
            ListNode p2 = head2;
            ListNode head;
            if (p1.val < p2.val) {
                head = p1;
                p1 = p1.next;
            } else {
                head = p2;
                p2 = p2.next;
            }
            ListNode p = head;
            while (null != p1 && null != p2) {
                if (p1.val <= p2.val) {
                    p.next = p1;
                    p1 = p1.next;
                    p = p.next;
                } else {
                    p.next = p2;
                    p2 = p2.next;
                    p = p.next;
                }
            }
    
            if (null != p1) {
                p.next = p1;
            }
            if (null != p2) {
                p.next = p2;
            }
            return head;
        }
    }
    

      

      

  • 相关阅读:
    mybatis 入门基础
    spring学习总结
    综合练习:词频统计
    组合数据类型综合练习
    Python基础综合练习
    熟悉常用的Linux操作
    1.大数据概述
    C程序语法(无左递归)
    文法规则
    实验一词法分析报告
  • 原文地址:https://www.cnblogs.com/Jomini/p/11735623.html
Copyright © 2020-2023  润新知