数据结构--链表--单链表归并排序mergesort

思路:

1.将链表的中点找到,对其切分成2条

2.继续步骤1,切成4条,8条。。。,直至每段链表只有1个元素

3.归并操作,对两两链表进行合并排序,并返回回并后的链表的头结点,依次向上递归回去

C++代码实现

链表头文件链接:https://github.com/hitskyer/course/tree/master/dataAlgorithm/chenmingming/linkedList/homework

//归并排序
// Created by mingm on 2019/3/23.
//
#include <iostream>
#include <time.h>
#include <cstdlib>
#include "./homework/singleList.cpp"
using namespace std;ListNode GetMidNode(ListNode s)   //快慢指针法,获取中间节点
{ListNode fast, slow;fast = s->pNext;//让快指针早点到达末位,慢指针指向中点或者(偶数个长度时)中点前一个位置slow = s;while(fast && fast->pNext){fast = fast->pNext->pNext;slow = slow->pNext;}return slow;
}
ListNode mergeList(ListNode L, ListNode R)  //归并函数
{if(L == NULL)   //如果一边为空,则返回另一边的头结点return R;if(R == NULL)return L;ListNode tempL = L, tempR = R;  //把左右表头存储起来ListNode temp = new SNode, emptyHead = temp; //利用一个空表头哨兵tempwhile(tempL && tempR)       //左右链表均不为空的话,进行数据比较{if(tempL->data < tempR->data){temp->pNext = tempL;temp = temp->pNext;tempL = tempL->pNext;}else{temp->pNext = tempR;temp = temp->pNext;tempR = tempR->pNext;}}if(tempL)                   //如果左边还有剩余的节点,把其接入链表末尾temp->pNext = tempL;if(tempR)                   //如果右边还有剩余的节点,把其接入链表末尾temp->pNext = tempR;temp = emptyHead->pNext;     //实际链表数据节点表头delete emptyHead;           //释放new出来的哨兵emptyHead = NULL;return temp;                //返回链表数据头结点
}
ListNode divList(ListNode Lhead)
{if(Lhead == NULL || Lhead->pNext == NULL)   //链表长度为0或者1,不用排序return Lhead;ListNode Mid = GetMidNode(Lhead);   //获取链表中间节点(如果长度为2,则Mid是第一个节点)ListNode Rhead = Mid->pNext;    //右边链表表头地址Mid->pNext = NULL;              //断开左右链表ListNode L = divList(Lhead);    //继续对左右两条链表进行划分ListNode R = divList(Rhead);return mergeList(L,R);          //返回merge后的链表的表头
}
ListNode mergeSort(ListNode head)   //归并排序入口,将头结点地址传入
{if(head == NULL || head->pNext == NULL) //链表长度为0或者1,不用排序return head;elsedivList(head);  //长度大于1,则对其进行划分将链表切片
}int main()
{srand((unsigned)time(NULL));    //用时间随机数种子size_t len = 10;       //测试链表最大长度for(size_t j = 0; j < len; ++j){SingleList intList;for(size_t i = 0; i < j; ++i){intList.AddTail(rand()%100);    //添加随机数到链表}cout << "before merge sort: " << endl;intList.PrintList();    //排序前链表打印intList.SetHeadNode(mergeSort(intList.GetHeadNode()));  //把排序后的链表的头结点设置成链表的头结点cout << "after merge sort: " << endl;intList.PrintList();    //排序后链表打印}return 0;
}

Valgrind检查结果

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

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

相关文章

我们的实践:事理图谱,下一代知识图谱

原文链接&#xff1a;https://mp.weixin.qq.com/s/iLfXeVeWE5CCs_sM_NAOSw 一、人工智能与认知智能 当前人工智能时代下&#xff0c;机器与人类之间的博弈一直在进行着。如图1所示&#xff0c;从1956年达特茅斯会议的召开标志人工智能诞生到深度学习模型在若干人工智能领域大规…

领域应用 | 偷偷告诉你,那些二次元萌妹都有个叫知识图谱的爸爸

本文转载自公众号&#xff1a;AI 时间。《AI108将》是AI时间全新的AI行业人物专访栏目。艾伦麦席森图灵说&#xff1a;有时&#xff0c;那些人们对他们并不抱有期望的人&#xff0c;却能做到人们不敢期望的事情。Sometimes Its very people who no one imagines angthing of wh…

白话生成对抗网络 GAN,50 行代码玩转 GAN 模型!【附源码】

今天&#xff0c;带大家一起来了解一下如今非常火热的深度学习模型&#xff1a;生成对抗网络&#xff08;Generate Adversarial Network&#xff0c;GAN&#xff09;。GAN 非常有趣&#xff0c;我就以最直白的语言来讲解它&#xff0c;最后实现一个简单的 GAN 程序来帮助大家加…

java架构师进阶之独孤九剑(一)-算法思想与经典算法

“ 这是整个架构师连载系列&#xff0c;分为9大步骤&#xff0c;我们现在还在第一个步骤&#xff1a;程序设计和开发->数据结构与算法。 我们今天讲解重点讲解算法。 算法思想 1 贪心思想 顾名思义&#xff0c;贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并…

数据结构--链表--单链表中环的检测,环的入口,环的长度的计算

就如数字6一样的单链表结构&#xff0c;如何检测是否有6下部的○呢&#xff0c;并且求交叉点位置 思路 使用快慢指针&#xff08;一个一次走2步&#xff0c;一个走1步&#xff09;&#xff0c;若快慢指针第一次相遇&#xff0c;则有环 慢指针路程 sabs absab 快指针路程 2sa…

ACL 2010-2020研究趋势总结

一只小狐狸带你解锁 炼丹术&NLP 秘籍作者&#xff1a;哈工大SCIR 车万翔教授导读2020年5月23日&#xff0c;有幸受邀在中国中文信息学会青年工作委员会主办的AIS&#xff08;ACL-IJCAI-SIGIR&#xff09;2020顶会论文预讲会上介绍了ACL会议近年来的研究趋势&#xff0c;特整…

架构师进阶之独孤九剑:设计模式详解

我们继续架构师进阶之独孤九剑进阶&#xff0c;目前我们仍然在第一阶段&#xff1a;程序设计和开发环节。 “ 设计模式不仅仅只是一种规范&#xff0c;更多的是一种设计思路和经验总结&#xff0c;目的只有一个&#xff1a;提高你高质量编码的能力。以下主要分为三个环节&…

知识表示发展史:从一阶谓词逻辑到知识图谱再到事理图谱

研究证实&#xff0c;人类从一出生即开始累积庞大且复杂的数据库&#xff0c;包括各种文字、数字、符码、味道、食物、线条、颜色、公式、声音等&#xff0c;大脑惊人的储存能力使我们累积了海量的资料&#xff0c;这些资料构成了人类的认知知识基础。实验表明&#xff0c;将数…

领域应用 | 基于知识图谱的警用安保机器人大数据分析技术研究

本文转载自公众号&#xff1a;警察技术杂志。 郝久月 樊志英 汪宁 王欣 摘 要&#xff1a;构建大数据支撑下的智能应用是公安信息化发展的趋势&#xff0c;警用安保机器人大数据分析平台的核心功能包括机器人智能人机交互和前…

数据挖掘学习指南!!

入门数据挖掘&#xff0c;必须理论结合实践。本文梳理了数据挖掘知识体系&#xff0c;帮助大家了解和提升在实际场景中的数据分析、特征工程、建模调参和模型融合等技能。完整项目实践&#xff08;共100多页&#xff09;后台回复 数据挖掘电子版 获取数据分析探索性数据分析&am…

数据结构--栈--顺序栈/链式栈(附: 字符括号合法配对检测)

栈结构&#xff1a;先进后出&#xff0c;后进先出&#xff0c;像叠盘子一样&#xff0c;先叠的后用。 代码github地址 https://github.com/hitskyer/course/tree/master/dataAlgorithm/chenmingming/stack 1.顺序栈&#xff08;数组存储&#xff0c;需给定数组大小&#xff0c…

银行计考试-计算机考点2-计算机系统组成与基本工作原理

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/sinat_33363493/article/details/53647129 </div><link rel"stylesheet" href"https://csdnimg.cn/release/pho…

我们的实践: 400万全行业动态事理图谱Demo

历史经验知识在未来预测的应用 华尔街的独角兽Kensho&#xff0c;是智能金融Fintech的一个不得不提的成功案例&#xff0c;这个由高盛领投的6280万美元投资&#xff0c;总融资高达7280万美元的公司自推出后便名声大噪。Warren是kensho是一个代表产品&#xff0c;用户能够以通俗…

蚂蚁花呗团队面试题:LinkedHashMap+SpringCloud+线程锁+分布式

一面 自我介绍 map怎么实现hashcode和equals,为什么重写equals必须重写hashcode 使用过concurrent包下的哪些类&#xff0c;使用场景等等。 concurrentHashMap怎么实现&#xff1f;concurrenthashmap在1.8和1.7里面有什么区别 CountDownLatch、LinkedHashMap、AQS实现原理 …

肖仰华 | SIGIR 2018、WWW2018 知识图谱研究综述

本文转载自公众号&#xff1a;知识工场。全国知识图谱与语义计算大会&#xff08;CCKS: China Conference on Knowledge Graph and Semantic Computing&#xff09;由中国中文信息学会语言与知识计算专委会定期举办的全国年度学术会议。CCKS源于国内两个主要的相关会议&#xf…

数据结构--栈--共享顺序栈

共享顺序栈&#xff1a;内部也是一个数组 将两个栈放在数组的两端&#xff0c;一个从数组首端开始压栈&#xff0c;一个从数组尾部开始压栈&#xff0c;等到两边栈顶在中间相遇时&#xff0c;栈满。 共享顺序栈在某些情况下可以节省空间。 头文件 sharingStack.h //共享顺序…

一个励志PM小哥哥的Java转型之路

先给大家看张我朋友圈截图&#xff1a; 这哥们本科学英语的&#xff0c;毕业后做了产品经理&#xff0c;去年 9 月份开始学 Java&#xff0c;6 个月的时间&#xff0c;拿到了快手的 Offer。如果你对 Java 也有兴趣&#xff0c;不妨听完这个故事。你是不是也和他当时的处境…

最全蚂蚁金服高级Java面试题目(3面)

一面&#xff1a; JVM数据存储模型&#xff0c;新生代、年老代的构造&#xff1f; java GC算法&#xff0c;什么时候会触发minor gc&#xff0c;什么时候会触发full gc&#xff1f; GC 可达性分析中哪些算是GC ROOT&#xff1f; 你熟悉的JVM调优参数&#xff0c;使用过哪些调…

运用事理图谱搞事情:新闻预警、事件监测、文本可视化、出行规划与历时事件流生成

目前&#xff0c;事理图谱在描述领域事件时空信息上具有独特性&#xff0c;这种逻辑图结构能够以一种直观的方式向我们展现出一个领域知识的链路信息。从学术的角度上来说&#xff0c;事理图谱与事件抽取、事件关系抽取、脚本学习、事件链生成、篇章句间关系识别、图谱图结构运…

CCKS 2018 | 最佳论文:南京大学提出 DSKG,将多层 RNN 用于知识图谱补全

本文转载自公众号&#xff1a;机器之心。 选自CCKS 2018作者&#xff1a;Lingbing Guo、Qingheng Zhang、Weiyi Ge、Wei Hu、Yuzhong Qu机器之心编译参与&#xff1a;Panda、刘晓坤2018 年 8 月 14-17 日&#xff0c;主题为「知识计算与语言理解」的 2018 全国知识图谱…