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就行了,因为后面的已经排好了,不过这样也没有错,时间复杂度在数量级上也是一样的

  • 相关阅读:
    HTML5之特效
    css3圆角矩形、盒子阴影
    vertical-align垂直居中
    CSS3选择器
    经典导航栏
    C#获得时间段
    C#抓取和分析网页的类
    c#基础知识索引器
    强制浏览器重定向到另一页
    雅虎公司C#笔试题及参考答案
  • 原文地址:https://www.cnblogs.com/wmxl/p/14466915.html
Copyright © 2011-2022 走看看