zoukankan      html  css  js  c++  java
  • 单链表 冒泡排序

    先求长度,然后模拟冒泡排序的思想进行交换,小技巧,弄一个哨兵节点放在头结点前面,会方便很多。(链表的很多题都可以用这个小技巧来减少一些边界条件的处理)

    /**
         * linklist冒泡排序
         * @param head
         * @return
         * @throws InterruptedException
         */
        ListNode sort(ListNode head) throws InterruptedException {
            if(head == null || head.next == null) return head;
    
            ListNode newHead = new ListNode(0), prev = newHead;
            prev.next = head;
    
            int len = 0;
            ListNode now = head;
            while(now != null){
                len++;
                now = now.next;
            }
    
            for (int i = 0; i < len; i++) {
                ListNode j = newHead.next;
                while(j.next != null){
                    if(j.val > j.next.val){
                        prev.next = j.next;
                        prev = j.next;
                        j.next = j.next.next;
                        prev.next = j;
                    }else{
                        prev = j;
                        j = j.next;
                    }
                }
                prev = newHead;
            }
            return newHead.next;
        }
    

    应该还可以优化,比如每轮循环其实不需要比较到最后每次比较到len-i就行了,因为后面的已经排好了,不过这样也没有错,时间复杂度在数量级上也是一样的

  • 相关阅读:
    Spring (4)框架
    Spring (3)框架
    Spring (2)框架
    javaSE面试题总结 java面试题总结
    分层结构
    三次握手
    17_网络编程
    16_多线程
    Ecplise中指定tomcat里Web项目发布文件
    Web 项目没有发布到我们安装的tomcat目录下
  • 原文地址:https://www.cnblogs.com/wmxl/p/14466915.html
Copyright © 2011-2022 走看看