使用归并排序对链进行排序(超简单)

使用归并排序对链进行排序

首先归并排序的中心归并两个已经有序的数组。归并两个有序数组A和B,就生成了第三个有序数组C。数组C包含数组A和B的所有数据项。
在这里插入图片描述
先找到一个链的中间链,然后左右开始排序!
数组的中间很好找但是一个链的tm的中间链怎么找,循环一下i++得到总长 然后在找中间链???黑人问号

在这里插入图片描述

观察上面图你能发现什么?
b走两步a走一步,a永远是在b中间的点,有没有,哈哈,是不是很神奇
现在我们知道了如何找中间点的思路,那么开始吧

/**
 * 
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode sortList(ListNode head) {
        return head == null ? null : mergeSort(head);
    }

    private ListNode mergeSort(ListNode head) {
       if(head.next==null)//head.next==null说明它后面没有节点了,都t喵没有节点了,当然返回咯
       {
           return head;
       }
        
        //            slowp慢指针  fastp指针    慢指针的上一个节点
        ListNode slowp=head,fastp=head,pre=null;
        while(fastp!=null&&fastp.next!=null)//快指针什么时候结束,它是null的时候,和它next=null的时候
        {
            pre=slowp;
            slowp=slowp.next;
            fastp=fastp.next.next;
        }
        
        pre.next=null;//pre (中间节点的上一个节点) 的next=null,让它们之间断了联系
      ListNode l= sortList(head);
       ListNode r= sortList(slowp);
        
        return merge(l,r);
        
    }

    ListNode merge(ListNode l, ListNode r) {
     ListNode re=new ListNode(-1);//用来存储要返回的最小的头
        ListNode temporary=re;//临时的节点
        while(l!=null&&r!=null)
        {
            if(l.val<r.val)// l.val小于r.val
            {
                temporary.next=l;//当前temporary指向 re 所以re.next=l 后面的 temporary 指向l
                temporary=l;//temporary 指向 l
                l=l.next;//当前的l的val小与r的val说明 当前l的val小于r的全部 因为都是有序的 
         
            }else 
            {
            //同理
                temporary.next=r;
                temporary=r;
                r=r.next;
                
            }
            
            
            
        }
        
        if(l!=null)//如果上面那个while什么时候结束在(l!=null&&r!=null)时结束 比如 节点1 和节点2比较 节点1<点2(节点二后面) re.next=节点1  temporary=节点1  
        {
            temporary.next=l;//temporary=节点1   temporary.next=节点2
               
            
        }
        if(r!=null)//同理
        {
            
               temporary.next=r;
        }
        
        
        return re.next;
        
        

    }
}

在这里插入图片描述
。。。。说也说不好。。画图也也不会。。。。。
敲一下理解一下逻辑就应该知道了 ok

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值