链表问题16——单链表的选择排序
题目
给定一个无序单链表头节点head,实现单链表的选择排序
要求:额外空间复杂度为O(1),时间复杂度O()
思路
选择排序是从未排序的部分中找到最小值,然后放在排好序部分的尾部。
- 开始整个链表都是未排序部分,找都整个链表的最小值点即为新的头节点
- 在未排序的部分中找到最小值的节点,然后在未排序部分删除这个节点,并连接到排好序部分的队尾
- 返回头节点
源码
public static class Node{public int value;public Node next;public Node(int data){this.value=data;}
}public static Node selectionSort(Node head){Node tail=null;//排序部份尾部Node cur=head;//未排序部分头部Node smallPre=null;//最小节点的前一个节点Node small=null;//最小的节点while(cur!=null){small=cur;smallPre=getSmallestPreNode(cur);//当头节点是最小节点时,smallPre为空if(smallPre!=null){small=smallPre.next;smallPre.next=small.next;}//cur为未排序部分的头节点,如果当前cur为最小值//则cur要往后继续走一步,否则不变cur=cur==small?cur.next:cur;//将最小值节点赋值为新的头节点if(tail==null){head=small;}else{tail.next=small;}tail=small;}return head;
}
//返回未排序部分的最小值节点的前一个节点
public Node getSmallestPreNode(Node head){Node smallPre=null;Node small=head;Node pre=head;Node cur=head.next;while(cur!=null){if(cur.value<small.value){small=cur;smallPre=pre;}pre=cur;cur=cur.next;}return smallPre;
}
链表问题16——单链表的选择排序相关推荐
- 链表问题16——单链表的选择排序(python版本)
题目 给定一个无序单链表头节点head,实现单链表的选择排序 要求:额外空间复杂度为O(1),时间复杂度O() 思路 选择排序是从未排序的部分中找到最小值,然后放在排好序部分的尾部. 开始整个链表都是 ...
- 链表14:单链表的排序
前面我们连续多节分析了链表反转的问题,你有没有注意到最大的问题都是指针要进行调整时的指向问题?具体又体现在两个方面,一个是反转相关的问题,一个是合并相关的问题,有些算法还是两个的结合.LeetCode ...
- c语言单链表设计报告,单链表实验报告
<数据结构>实验报告二 分校: 学号: 日期: 班级: 姓名: 程序名: L2311.CPP 一.上机实验的问题和要求: 单链表的查找.插入与删除.设计算法,实现线性结构上的单链表的产生以 ...
- 第二章——单链表和循环单链表
线性表--链表 顺序表需要事先占用一整块实现分配大小的存储空间,但是对于某些问题:很多空间只使用一次(甚至根本用不到),使用顺序表存储空间的利用率往往很低.于是需要一种能够动态管理存储空间的存储结构- ...
- php要求掌握链表结构吗,PHP 链表结构之单链表(一)
php链表结构,单链表(一) 单链表结构,我们这边定义一个节点类,属性有当前值(data)和指向下一个节点的(next) class ListNode { public $data = NULL; p ...
- 数据结构实验之链表五:单链表的拆分-sdut
数据结构实验之链表五:单链表的拆分 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 输入N个 ...
- SDUT_2122 数据结构实验之链表七:单链表中重复元素的删除
提交代码 数据结构实验之链表七:单链表中重复元素的删除 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Proble ...
- 【数据结构链表】之五单链表
一:链表基础 1.链表基础----------------摘录自百度百科 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中 ...
- python单链表操作_单链表的创建、增删改查等操作(Python实现)
单链表的创建.增删改查等操作(Python实现) # 单链表 class Node: def __init__(self, elem): self.elem = elem self.next = No ...
最新文章
- 传蔚来计划回国内科创板上市,关闭硅谷办公室
- ubuntu16.04+cuda7.5
- 2019年六月刷题列表
- 监控Spark应用方法简介
- [iOS] 封装倒计时(一句话调用,无内存泄漏)
- LeetCode 840. 矩阵中的幻方(数学)
- Android中如何查看内存(上)
- 学习日记之工厂方法模式和Effective C++
- 2月26日 Scrapy入门
- wordpress常用插件
- .Net C# Newtonsoft.Json JsonSerializerSettings配置
- 在win7中chm打不开的多种解决方法
- 我和8个程序员聊了一下午,攒齐这些了观点...
- Lenovo联想G460无电池ThinkPad强制刷新BIOS的方法,非电池补丁
- 手机信息通知标为已读实现原理_27条iPhone苹果(附iPhoneX)手机使用技巧,你用过多少条?...
- MFC - LNK2001 “无法解析的外部符号”的几种情况及解决办法
- 通过md5值删除重复文件
- 性能可靠服务器虚拟化,服务器虚拟化下的网络变迁
- SLAM论文精读系列:(第二篇)通过Wi-Fi传感增强视觉SLAM的室内应用
- PPC r0-r31寄存器介绍