链表大小排序方法c语言,C语言数据结构 链表与归并排序实例详解

2023-11-13

C语言数据结构 链表与归并排序实例详解

归并排序适合于对链表进行原址排序,即只改变指针的连接方式,不交换链表结点的内容。

归并排序的基本思想是分治法:先把一个链表分割成只有一个节点的链表,然后按照一定顺序、自底向上合并相邻的两个链表。

只要保证各种大小的子链表是有序的,那么最后返回的链表就一定是有序的.

归并排序分为分割和合并两个子过程。分割是用递归的方法,把链表对半分割成两个子链表;合并是在递归返回(回朔)的时候,把两个有序链表合并成一个有序链表。

4c2fb0b1020a633972487b6f8361b811.png

(注意:只有一个节点的链表一定是有序的)

这里sort过程就是分割过程;merge过程就是合并且排序的过程

说到分割链表,那么问题来了:链表不是随机访问的,我怎么知道分割点在哪里?一个宝贵的经验就是:维护两个指针,一快一慢。快指针每次后移两个单位,慢指针每次只移动一个单位。当快指针移动到tail或者最后一个有效节点时,慢指针就指向了中间的节点。

sort过程:

Node* sort (Node* beg)

{

if(beg==tail || beg->next==tail) return beg;

Node* a = beg; Node* b = beg->next;

while(b!=tail && b->next != tail)

{

a = a->next; b = b->next->next;

}

b = a->next; //the beginning of right part

a->next = tail; //the end of left part

return merge(sort(beg), sort(b));

}

把链表分割之后就要合并。merge操作传入的参数是两个有序链表,返回的是合并后的有序的链表。两个有序链表简单拼接之后不一定是有序的,需要对每一个元素重排。这个重排的过程是从两个链表各自最小(最大)元素开始,谁小(大)就把谁放到新的链表里。

077259735165557928ad9f5843f90012.png

Node* LinkedList::merge(Node* a, Node* b)

{

Node dummy = Node();

Node* head = &dummy;

// temp是正在合并的表的节点

Node* temp = head;

while(a!=tail && b!=tail) //逐个比较链表a和链表b的每个元素

{

if(a->data <= b->data)

{

// 如果a比b小, 那么当前结点的后继就是a

temp->next = a;

// 把当前节点移向后继

temp = a;

// a后移

a = a->next;

}

else

{

temp->next = b;

temp = b;

b = b->next;

}

// 如果原表a已经排完,那么新表后面就放b的剩余元素

// 否则仍然以a为标准和b进行比较

temp->next = (a==tail) ? b : a;

}

return head->next;

}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

链表大小排序方法c语言,C语言数据结构 链表与归并排序实例详解 的相关文章

  • 深度学习可视化工具FiftyOne介绍

    FiftyOne是用于构建高质量数据集和计算机视觉模型的开源工具 由Python语言实现 最新发布版本为v0 14 0 它的License是Apache 2 0 源码位于https github com voxel51 fiftyone F
  • 积分商城能给商家带来哪些帮助?

    说起积分商城 不少人都大概接触过 甚至使用过 最常见的 例如我们使用的手机号码就有积分商城的存在 通过充值话费 会累积一定的消费积分 而这些积分通常在手机营业厅APP上可以查询到其作用 早期的积分商城玩法较少 如今已经变得很成熟 常见的有积
  • python里object是什么类型_Python object类中的特殊方法

    python版本 3 8 class object The most base type del obj xxx或delattr obj xxx 时被调用 删除对象中的一个属性 def delattr self args kwargs re
  • (Ubuntu Linux)Conda安装Pytorch2.0-Python3.8-Cuda11.7

    Ubuntu Linux Conda安装Pytorch2 0 Python3 8 Cuda11 7 一 安装Anaconda 安装包下载 https repo anaconda com archive 1 选择合适的安装包 每个版本中对应不
  • AppScan安全漏洞报告

    1 会话cookie 中缺少HttpOnly 属性 修复任务 向所有会话cookie 添加 HttpOnly 属性 解决方案 过滤器中 Java代码 HttpServletResponse response2 HttpServletResp
  • Linux-DM9000C网卡移植(详解)

    上一节 我们学习了 网卡驱动介绍以及制作虚拟网卡驱动 http www cnblogs com lifexy p 7763352 html 接下来本节 学习网卡芯片DM9000C 如何编写移植DM9000C网卡驱动程序 1 首先来看DM90
  • spring boot 的 ApplicationContext 及 getbean

    在spring中 我们通过如下代码取得一个spring托管类 ApplicationContext ac new FileSystemXmlApplicationContext applicationContext xml ac getBe
  • 红日安全vulnstack-ATT&CK实战系列 红队实战(四)

    一 介绍 下载地址http vulnstack qiyuanxuetang net vuln detail 6 strusts漏洞利用phpmyadmin getshell tomcat 漏洞利用 docker逃逸 ms14 068 ssh
  • AutoScraper——爬虫神器

    AutoScraper是一个自动化的爬虫工具 非常智能 而且使用简单便捷 AutoScraper 是使用 Python 实现的 Web 爬虫 兼容 Python 3 能快速且智能获取指定网站上的数据 在github上具有4 8K githu
  • springboot结合redis(保存用户登录信息)

    一 导入包
  • 1.计算机图形学 实验 线条(利用C语言图形函数绘图)

    1 修改例1的代码 改变顶点个数 要求50个顶点 使得得到的图形更逼近于正圆 在实验报告中给出完整的代码和对应的运行结果截图 include
  • 用python比较大小

    1 比较 ax lt xa 的大小 代码为 print ax lt xa 结果为True print ord a print ord x 字符串是通过ASCII表来进行顺次为比较大小 2 is与 的区别 print 1 is True 为F
  • Java为什么不能写大型游戏?

    所谓大游戏 一般指端游 必须是C 没办法 C 和java的效率还是有很大差距的 基本上所有东西都可以用java开发 但是java致命的一点就是不能直接操作内存 只能安装虚拟机 这就造成了java的开发有很多局限性 但是java提供了本地方法
  • python 简单k近邻分类器的实现

    1 问题 在此使用k近邻算法实现一个简单分类器 其中model xls表样式如下表1所示 表1 model xls数据表 分析 数据存放在model xls中 需要利用panda数据 对数据进行切片为指标和结果 切片后的数据类型为dataf
  • 教你几种MySQL 中常见的高可用架构部署方案

    MySQL 中的集群部署方案 前言 这里来聊聊 MySQL 中常用的部署方案 MySQL Replication MySQL Replication 是官方提供的主从同步方案 用于将一个 MySQL 的实例同步到另一个实例中 Replica
  • 现代控制理论4——线性系统状态方程的解

    注 本文是在MOOC平台上学习西北工业大学 现代控制理论基础 郭建国 赵斌 郭宗易 的课程进行随笔记录与整理 一 线性定常连续系统状态方程的解 齐次方程 1 求解 齐次状态方程 x Ax 其解描述的是 即无控情况下在初始状态作用下系统的自由
  • Spring Boot 中的 @Async 注解是什么,如何使用

    Spring Boot 中的 Async 注解是什么 如何使用 引言 在开发 Web 应用程序时 经常需要执行一些耗时的操作 比如发送邮件 生成报表 调用第三方接口等等 这些操作如果在主线程中执行 会导致请求响应时间过长 影响用户体验 为了
  • 双层神经网络模型

    第8到12行为正向传播算法 输出一个损失函数 其中h为sigmod激活函数 第11行为L2损失函数 第14到20行为反向传播算法 使用梯度下降法对权值进行优化 注 常见的几种Activation Functions

随机推荐

  • FAT32文件系统中文件的“修改时间”

    海思 项目背景 项目中用到AV3板 AV1板及CPU板 AV3板给AV1板校时 CPU板给AV3板校时 AV3板是UTC时间 AV1板和CPU板是CST时间 且时区不能修改 问题说明 AV3板产生的文件的 修改时间 在windows里面查看
  • ESP8266 + Arduino (四) 客户端向服务器发送数据信息---2022.3.5

    学习目的 通过两块esp8266模块实现互联 一块作为服务器 另一块作为客户端 连接成功后客户端发送http请求 并通过客户端的按键来控制服务器端的LED 的亮灭 在这个示例中 ESP8266客户端将会通过HTTP协议向ESP8266服务器
  • MySQL数据类型char与varchar中数字代表的究竟是字节数还是字符数?

    实例是最好的说明 所以 废话少说 看表看例子 mysql gt show create table test varchar utf8 G 1 row Table test varchar utf8 Create Table CREATE
  • 搜索引擎使用技巧汇总,一篇就够了

    搜索引擎使用必知必会技巧汇总 写在前面 我们在从互联网获取信息的时候 使用最频繁的莫过于搜索引擎 查Bug 找资源过程中很浪费时间 而学习一些搜索技巧可以大大提高我们的效率 小Tip 注 以下方法在Google搜索引擎上正常使用 百度未测试
  • CodeWhisperer插件使用体验

    官方教程点击跳转 使用工具 1 vscode 2 插件 AWS Toolkit 免费使用 安装以后如何使用 1 首先要有一个aws账号 2 插件下载好以后登录aws账号 我们主要用这款插件的CodeWhisperer这个功能 其它的自行看官
  • C++多态性:虚函数的调用原理

    C 多态性 虚函数的调用原理 多态性给我们带来了好处 多态使得我们可以通过基类的引用或指针来指明一个对象 包含其派生类的对象 当调用函数时可以自动判断调用的是哪个对象的函数 一个函数说明为虚函数 表明在继承的类中重载这个函数时 当调用这个函
  • Python 三目运算符讲解(作用、语法、代码示例)

    这篇文章介绍三目运算符的作用 语法 利用例子体验一下三目运算符 三目运算符的作用 化简代码量的 化简的是非常简单的if else的代码 也就是if条件成立就执行一句代码 不成立就执行另外一句代码 三目运算符含义 三目运算符也叫作三元运算符或
  • Linux - 系统性能监控

    重点讨论一些有助于监视系统整体性能的工具 当理解了工作负荷的系统整体性能特征之后 还可以使用这组工具标识出哪些特定进程是整体工作负荷的性能瓶颈 在许多情况下 系统监视工具有助于推动系统调优工作 使得关键的性能瓶颈得到极大减少或消除 另一些情
  • PHP反序列化漏洞——云演

    昨天搞了搞掌控的反序列化 突然想到当时打CTF时老师给我们冲了个云演的靶场 就去看了看 也有反序列化漏洞 顺手搞搞加深一下印象 第一题 点进去后是这样的 还记得昨天的 php中有一类特殊的方法叫 Magic function 魔术方法 这里
  • tf.keras遇见的坑:Output tensors to a Model must be the output of a TensorFlow `Layer`

    报错为 Output tensors to a Model must be the output of a TensorFlow Layer 再编写TEXT CNN模型时 代码报错 以下为报错代码 convs inputs keras la
  • 如何用Flask和Redis来动态维护代理池

    我们在爬虫时可能会遇到封IP的问题 那么利用代理就可以进行IP的伪装 然后进行爬虫的请求 我们有时会需要非常多的ip 那么维护一个代理池 代理的队列 可以存入或取出 需要对整个池进行定期的检查和更新 以此来保证代理的高质量 也就是代理的检测
  • 腹部仿体abdomen phantom的MATLAB实现及探讨

    abdomen phantom 官网给出的切片图如下 我利用MATLAB实现的情况如下 切片像素矩阵为256 256时 中心切片如图 切片像素矩阵为512512时 中心切片如图 可见 1 512512尺寸的在线对区域差别明显 多一条竖直线
  • 学习Java——自动拆装箱

    目录 引言 基本数据类型 数据类型有什么好处 整数的取值范围 超出范围怎么办 包装类型 为什么需要包装类 拆箱与装箱 自动拆箱与装箱 实现原理 哪些场景会用到 场景一 将基本数据类型放入集合类 场景二 包装类型和基本类型的大小比较 场景三
  • AD软件点击启动没有反应

    文章目录 一 AD无法启动 二 解决方法 一 AD无法启动 之前用了很久的AD16 突然某一天打开电脑 点开AD 结果一点反应没有 我还楞了一下 怎么今天你小子不想上班了 然后又点了一次 还是没反应 于是头铁继续试了几次 离了个大谱 一点东
  • vue-element-admin 页面内点详情跳转

    之前都是点击按钮以弹窗的形式展示信息 现在有个需求是点了页面内的详情按钮后进行路由跳转 跳到一个新的页面上去 1 先添加路由 route index js path test component Layout redirect test n
  • Windows Server2016 安装docker 所踩的坑

    献给小白用户 首先参考官网文档 https docs microsoft com zh cn virtualization windowscontainers deploy containers deploy containers on s
  • 2023年最新前端面试题汇总大全二(含答案超详细,Vue,TypeScript,React,微信小程序,Webpack 汇总篇)-- 持续更新

    HTML篇 CSS篇 JS篇 Vue篇 TpeScript篇 React篇 微信小程序篇 前端面试题汇总大全 含答案超详细 HTML JS CSS汇总篇 持续更新 前端面试题汇总二 逐步更新 五 Vue 篇 1 谈谈你对MVVM开发模式的理
  • 万物革新人们刷脸支付需求越来越多元化

    随着时代的进步 技术的革新 消费者的消费逐渐感性化 它们已经不满足于大众化的同类消费 独出心裁 别具匠心的个性化消费逐渐成为潮流 刷脸支付的出现 让消费者拥有更具科技感 新鲜感 以及高效的消费体验 更是尽可能的满足了年轻一代消费者的支付需求
  • “新卷王”X-volution

    编辑 Happy 首发 AIWalker 在本文中 华为上交 华为海思提出了一种集成卷积与自注意力的Xvolution 它将卷积与自注意力进行了集成 同时利用卷积的局部特征提取能力与自注意力的全局建模能力 更重要的是 它通过结构重参数化机制
  • 链表大小排序方法c语言,C语言数据结构 链表与归并排序实例详解

    C语言数据结构 链表与归并排序实例详解 归并排序适合于对链表进行原址排序 即只改变指针的连接方式 不交换链表结点的内容 归并排序的基本思想是分治法 先把一个链表分割成只有一个节点的链表 然后按照一定顺序 自底向上合并相邻的两个链表 只要保证