• 栈和队列----单链表的选择排序


    单链表的选择排序

      

      给定一个无序单链表的头节点 head,实现单链表的选择排序,要求额外空间复杂度是 O(1)

      

      【解析】

      要求额外空间复杂度是 O(1),所以不能使用数组等容器进行排序,直接使用几个变量

      选择排序是在从未排序部分选择最小值,然后放在排序部分的尾部,逐渐将未排序部分缩小,最后变成排好序的部分。

    package com.test;
    
    import com.test.ListNode;
    
    /**
     * Created by Demrystv.
     */
    public class SelectionSortOfListNode {
    
        /*
        1. 开始时默认整个链表都是未排序的部分,对于找到的第一个最小值节点,肯定是整个链表的最小节点,将其设置为newHead
        2. 每次在未排序部分中找到最小值的节点,然后把这个节点从未排序的链表中删除,删除某个节点一定要找到这个节点的前一个节点
        3. 把删除的节点(也就是每次的最小值节点)连接到排好序部分的链表尾部。
        4. 全部过程处理完毕后,整个链表都已经有序,返回newHead
         */
        public ListNode selectionSort(ListNode head){
            ListNode tail = null; //已排序部分的尾部
            ListNode cur = head;  // 为排序部分的头部
            ListNode smallPre = null; //最小节点的头一个节点
            ListNode small = null; // 最小节点
    
            while (cur != null){
                small = cur;
                smallPre = getSmallPre(head);
                if (smallPre != null){
                    small = smallPre.next;
                    smallPre.next = small.next;
                }
                cur = cur == small ? cur.next : cur;
                if (tail == null){
                    head = small;
                }else {
                    tail.next = small;
                }
                tail = small;
            }
            return head;
        }
    
        public ListNode getSmallPre(ListNode head){
            ListNode smallPre = null;
            ListNode small = head;
            ListNode pre = head;
            ListNode cur = head.next;
    
            while (cur != null){
                if (cur.val < small.val){
                    small = cur;
                    smallPre = pre;
                }
                pre = cur;
                cur = cur.next;
            }
            return smallPre;
        }
    
    }
  • 相关阅读:
    多时钟域设计——控制信号传输
    时钟与复位
    注意
    有限状态机
    亚稳态
    python读取json文件制作股票价格走势
    python读取csv文件绘制气温图,x轴为日期,并填充颜色
    python读取csv文件数据绘制图像,例子绘制天气每天最高最低气温气象图
    python随机漫步
    python读取txt文件绘制散点图
  • 原文地址:https://www.cnblogs.com/Demrystv/p/9364171.html
Copyright © 2020-2023  润新知