题目

给定一个无序单链表头节点head,实现单链表的选择排序

要求:额外空间复杂度为O(1),时间复杂度O()


思路

选择排序是从未排序的部分中找到最小值,然后放在排好序部分的尾部。

  1. 开始整个链表都是未排序部分,找都整个链表的最小值点即为新的头节点
  2. 在未排序的部分中找到最小值的节点,然后在未排序部分删除这个节点,并连接到排好序部分的队尾
  3. 返回头节点

源码

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——单链表的选择排序相关推荐

  1. 链表问题16——单链表的选择排序(python版本)

    题目 给定一个无序单链表头节点head,实现单链表的选择排序 要求:额外空间复杂度为O(1),时间复杂度O() 思路 选择排序是从未排序的部分中找到最小值,然后放在排好序部分的尾部. 开始整个链表都是 ...

  2. 链表14:单链表的排序

    前面我们连续多节分析了链表反转的问题,你有没有注意到最大的问题都是指针要进行调整时的指向问题?具体又体现在两个方面,一个是反转相关的问题,一个是合并相关的问题,有些算法还是两个的结合.LeetCode ...

  3. c语言单链表设计报告,单链表实验报告

    <数据结构>实验报告二 分校: 学号: 日期: 班级: 姓名: 程序名: L2311.CPP 一.上机实验的问题和要求: 单链表的查找.插入与删除.设计算法,实现线性结构上的单链表的产生以 ...

  4. 第二章——单链表和循环单链表

    线性表--链表 顺序表需要事先占用一整块实现分配大小的存储空间,但是对于某些问题:很多空间只使用一次(甚至根本用不到),使用顺序表存储空间的利用率往往很低.于是需要一种能够动态管理存储空间的存储结构- ...

  5. php要求掌握链表结构吗,PHP 链表结构之单链表(一)

    php链表结构,单链表(一) 单链表结构,我们这边定义一个节点类,属性有当前值(data)和指向下一个节点的(next) class ListNode { public $data = NULL; p ...

  6. 数据结构实验之链表五:单链表的拆分-sdut

    数据结构实验之链表五:单链表的拆分 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 输入N个 ...

  7. SDUT_2122 数据结构实验之链表七:单链表中重复元素的删除

    提交代码 数据结构实验之链表七:单链表中重复元素的删除 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Proble ...

  8. 【数据结构链表】之五单链表

    一:链表基础 1.链表基础----------------摘录自百度百科 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中 ...

  9. python单链表操作_单链表的创建、增删改查等操作(Python实现)

    单链表的创建.增删改查等操作(Python实现) # 单链表 class Node: def __init__(self, elem): self.elem = elem self.next = No ...

最新文章

  1. 传蔚来计划回国内科创板上市,关闭硅谷办公室
  2. ubuntu16.04+cuda7.5
  3. 2019年六月刷题列表
  4. 监控Spark应用方法简介
  5. [iOS] 封装倒计时(一句话调用,无内存泄漏)
  6. LeetCode 840. 矩阵中的幻方(数学)
  7. Android中如何查看内存(上)
  8. 学习日记之工厂方法模式和Effective C++
  9. 2月26日 Scrapy入门
  10. wordpress常用插件
  11. .Net C# Newtonsoft.Json JsonSerializerSettings配置
  12. 在win7中chm打不开的多种解决方法
  13. 我和8个程序员聊了一下午,攒齐这些了观点...
  14. Lenovo联想G460无电池ThinkPad强制刷新BIOS的方法,非电池补丁
  15. 手机信息通知标为已读实现原理_27条iPhone苹果(附iPhoneX)手机使用技巧,你用过多少条?...
  16. MFC - LNK2001 “无法解析的外部符号”的几种情况及解决办法
  17. 通过md5值删除重复文件
  18. 性能可靠服务器虚拟化,服务器虚拟化下的网络变迁
  19. SLAM论文精读系列:(第二篇)通过Wi-Fi传感增强视觉SLAM的室内应用
  20. PPC r0-r31寄存器介绍

热门文章

  1. 深度学习深陷可解释性泥淖,而这个研究领域正逐步焕发生机
  2. Sentinel实现限流,竟是如此的简单!
  3. HTTP/3 来了 !HTTP/2 还没怎么用起来呢,先一起扫个盲吧!
  4. SpringBoot实现通用的接口参数校验
  5. 送Datawhale限量红包封面啦!
  6. 15 年腾讯老兵谈技术人成长之路
  7. 解析目标检测全流程!附代码数据
  8. 26 页高清大数据开发代码速查表,提升效率必备!【可下载】
  9. AI 博士生获201万最高档年薪,华科学子连续三年入选华为“天才少年”!
  10. 「留光」1小时:中科大让我们离「量子U盘」又近了一步