链表排序-归并

链表排序,可以插入排序,我就不写了。

实现归并排序

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

 

归并操作的工作原理如下:

第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置

第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

重复步骤3直到某一指针超出序列尾

将另一序列剩下的所有元素直接复制到合并序列尾

数组排序参考

https://blog.csdn.net/hebtu666/article/details/81434236

快慢指针:快的一次动两个,慢的一次一个,当快的到最后,慢的一定在中间。

自己手动模拟吧

/*考点:1. 快慢指针;2. 归并排序。复杂度分析:T(n)            拆分 n/2, 归并 n/2 ,一共是n/2 + n/2 = n/    \           以下依此类推:T(n/2) T(n/2)      一共是 n/2*2 = n/    \  /     \T(n/4) ...........   一共是 n/4*4 = n一共有logn层,故复杂度是 O(nlogn)*/
class Solution {
public:ListNode *sortList(ListNode *head) {if (!head || !head->next) return head;ListNode* p = head, *q = head->next;while(q && q->next) //快慢指针{p = p->next;q = q->next->next;}ListNode* left = sortList(p->next);//左右重复p->next = NULL;ListNode* right = sortList(head);return merge(left, right);}ListNode *merge(ListNode *left, ListNode *right) {ListNode dummy(0);ListNode *p = &dummy;while(left && right) {if(left->val < right->val) //小的放进来,指针向后{p->next = left;left = left->next;}else {p->next = right;right = right->next;}p = p->next;}if (left) p->next = left;//剩下的if (right) p->next = right;return dummy.next;}
};

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445574.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu麒麟下安装并启用搜狗输入法

1.首先打开UK软件&#xff0c;输入搜狗寻找搜狗拼音软件 然后下载搜狗拼音软件 接着点击启动该软件 2.点击搜狗拼音的图标&#xff0c;进入搜狗拼音的设置窗口 点击高级&#xff0c;并打开FCITX设置 加入英语输入法 3.这样就可以进行中英文切换了

线性表表示集合

集合我们高中都学过吧&#xff1f; 最重要的几个特点&#xff1a;元素不能重复、各个元素之间没有关系、没有顺序 集合内的元素可以是单元素或者是集合。 对集合的操作&#xff1a;交集并集差集等&#xff0c;还有对自身的加减等。 需要频繁的加减元素&#xff0c;所以顺序…

家用无线路由器购买入门指南

视频一&#xff1a;「白问」普通大众 买路由器关注这几个点就够了 来源 例如商品名&#xff1a;AC 1200M 双频 AX前缀wifi6IEEE 802.11 AX AC前缀wifi5IEEE 802.11 AC AX比AC好 1200M 理论峰值 和网速无关 商家噱头 MIMO SU-MIMO 单用户多进多出&#xff08;早期&#xff…

ubuntu linux下执行.sh文件

ubuntu linux下执行.sh文件 首先&#xff0c;要确保这个文件的类型是可执行的。 有两种办法把文件设置为可执行文件。 1) 直接在文件属性标签中选中 "可执行"&#xff0c;--b 如果用的是图形界面&#xff0c;这个方法最简单直接。 2) 使用命令 chmod x file.sh。将可…

链表相交问题

本来想自己写&#xff0c;写了一半发现一篇文章&#xff0c;解释写得简单易懂&#xff0c;我就直接拿过来了。 这个问题值得反复地写&#xff0c;锻炼链表coding能力的好题。 //如果两个链表都不带环 int NotCycleCheckCross(pLinkNode head1,pLinkNode head2) {pLinkNode lis…

用JS写了一个模拟串行加法器

在重温《编码&#xff1a;隐匿在计算机软硬件背后的语言》第12章——二进制加法器时&#xff0c;心血来潮用JS写了一个模拟串行加法器。 测试断言工具TestUtils.js function assertTrue(actual){if(!actual)throw "Error actual: " actual " is not true.&q…

Android学习路线总结

title: Android学习路线总结&#xff0c;绝对干货 tags: Android学习路线,Android学习资料,怎么学习android grammar_cjkRuby: true --- 一、前言 不知不觉自己已经做了几年开发了&#xff0c;由记得刚出来工作的时候感觉自己能牛X&#xff0c;现在回想起来感觉好无知。懂的越…

双栈

利用栈底位置相对不变的特性&#xff0c;可以让两个顺序栈共享一个空间。 具体实现方法大概有两种&#xff1a; 一种是奇偶栈&#xff0c;就是所有下标为奇数的是一个栈&#xff0c;偶数是另一个栈。但是这样一个栈的最大存储就确定了&#xff0c;并没有起到互补空缺的作用&a…

Error when loading the SDK:解决方案

错误情况&#xff1a; 当打开eclipse时出现如下窗口&#xff08;内容如下&#xff09; Error when loading the SDK: Error: Error parsing \Android\adt-bundle-windows-x86_64-20140702\sdk\system-images\android-22\android-wear\armeabi-v7a\devices.xml cvc-complex-type…

单调队列优化的背包问题

对于背包问题&#xff0c;经典的背包九讲已经讲的很明白了&#xff0c;本来就不打算写这方面问题了。 但是吧。 我发现&#xff0c;那个最出名的九讲竟然没写队列优化的背包。。。。 那我必须写一下咯嘿嘿&#xff0c;这么好的思想。 我们回顾一下背包问题吧。 01背包问题 …

用Python去除扫描型PDF中的水印

内容概述 含水印扫描型PDF文件&#xff0c;其中某页如下图所示&#xff0c;用Python去除其页顶及页底的水印。 处理思路&#xff1a;PDF中的每一页的水印的相对位置基本相同&#xff0c;将PDF每一页输出成图片&#xff0c;然后进行图片编辑&#xff0c;用白色填充方形覆盖水印…

链表实现栈

栈&#xff0c;是操作受限的线性表&#xff0c;只能在一端进行插入删除。 其实就是带尾指针的链表&#xff0c;尾插 #include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #define Status int #define SElemType int //只在头部进行插入和删除(…

二阶有源滤波器

滤波器是一种使用信号通过而同时抑制无用频率信号的电子装置, 在信息处理、数据传送和抑制干扰等自动控制、通信及其它电子系统中应用广泛。滤波一般可分为有源滤波和无源滤波, 有源滤波可以使幅频特性比较陡峭, 而无源滤波设计简单易行, 但幅频特性不如滤波器, 而且体积较大。…

用JS写了一个30分钟倒计时器

效果图 额外功能 左键单击计时器数字区&#xff0c;不显示或显示秒钟区。左键双击计时器数字区&#xff0c;暂停或启动计时器。计时完毕&#xff0c;只能刷新页面启动计时器。输入框可输入备注信息&#xff0c;输入框失去焦点或计时完毕后&#xff0c;时间戳附带备注信息会存入…

为什么高手离不了Linux系统?我想这就是理由!

通过本文来记录下我在Linux系统的学习经历&#xff0c;聊聊我为什么离不了Linux系统&#xff0c;同时也为那些想要尝试Linux而又有所顾忌的用户答疑解惑&#xff0c;下面将为你介绍我所喜欢的Linux系统&#xff0c;这里有一些你应该知道并为之自豪的事实。 这里你应该首先抛开W…

python学习实例(1)

# #1.2 计算机编程的基本概念 ## #1.2.2 从Python语言进入计算机语言的世界 ##<程序&#xff1a;例子1> def F(x,y):return(x*xy*y) print("F(2,2)",F(2,2)) print("F(3,2)",F(3,2))#<程序&#xff1a;例子2> def Pr():for i in range(0,10)…

用JS写一个电影《黑客帝国》显示屏黑底绿字雨风格的唐诗欣赏器

效果图 放码过来 <!DOCTYPE HTML> <html><head><meta http-equiv"Content-Type" content"text/html;charsetutf-8"/><title>Black Screen And Green Characters</title><style type"text/css">table…

python学习实例(2)

# #2.2 不同进制间的转换 ## #2.2.1. 二进制数转换为十进制数 ##<程序&#xff1a;2-to-10进制转换> binput("Please enter a binary number:") d0; for i in range(0,len(b)):if b[i] 1:weight 2**(len(b)-i-1)d dweight; print(d)#<程序&#xff1a;改…

元器件封装大全:图解+文字详述

先图解如下&#xff1a; 元器件封装类型&#xff1a; A.Axial  轴状的封装&#xff08;电阻的封装&#xff09;AGP &#xff08;Accelerate raphical Port&#xff09; 加速图形接口 AMR(Audio/MODEM Riser) 声音/调制解调器插卡BBGA&#xff08;Ball Grid Array&#xff09;…

python学习实例(3)

# #3.4 关于Python的函数调用 ## #3.4.2 Python函数入门 ##<程序&#xff1a;计算43*22> #函数f def f(x, y):return x*y*y#主函数部分 c4f(3, 2) print (c)# #3.4.3 局部变量(Local variables)与全局变量(Global variables) ##<程序&#xff1a;打印局部变量a和全局…