当前位置:网站首页 > 区块链基础 > 正文

单向链表排序(单向链表 排序)



目录

单链表的快速排序

单链表的插入排序

单链表的快速排序和数组的快排基本思想相同,同样是不断划分。(以从小到大排序为例)取一个结点设其为关键结点,将所有结点的数字与其比较,比关键结点数字大的放在结点的右边,比关键结点数字小的放在关键结点的左边。

单个排序为例(privot指针指向的为关键结点,p为与其比较的数字的结点,i指针指向所比较数字的上一个结点):

head 4 3 5 NULL pr、i p head 3 4 5 NUp p pr、i

此链表设4为关键节点,3比4小因此应该放在4的左边,因此交换两节点的位置。交换结点的代码如下:

 
  

交换后则p应该向前移一位,此时p与pr结点相同,不符合以上交换条件,则指针位置并不改变,但由于循环会使p向后移一位,因此在不交换结点时,应该让i指针向后移一位。

以此类推,当此次循环结束可知关键结点左边都比它小,右边都比它大,即关键结点的位置确定了。因此使关键结点左边与右边分成两半,分别以同样的方式排序,即进入递归。通过递归排序完成。

单链表的快速排序代码如下:

 
  

(以从小到大为例)插入排序为以第二个数字开始,将每一个数字插入到比它小的数字之前,curr指针所指向的为被插入的结点位置,与前一个结点进行比较,如果它比前一个结点数字小即代表它需要插入。进入内层循环,prev所指向的结点为插入位置的前一个结点,当prev的下一个结点的数字大于我们所要插入的结点数字时,进行插入操作

刚开始 head 4 3 2 NULL 指针位置 prev l curr 交换后 head 3 4 2 NULL curr l

因为3比4小因此将3进行插入操作。插入时应先时prev位于头结点位置,进行循环,找到插入点。

插入操作代码如下:

 
  

如果curr指向的数字比l指向的数字大,无需插入,则使两个指针都向后移,若出现了插入操作只需使curr放在l的后一个结点。

单链表的插入排序代码如下:

 
  

到此这篇单向链表排序(单向链表 排序)的文章就介绍到这了,更多相关内容请继续浏览下面的相关 推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 短链接防红跳转(短链接直接跳到目标网址)2026-04-27 08:36:05
  • 什么是跳转链接(链接跳转代码)2026-04-27 08:36:05
  • 腾讯文档跳转链接的方法(腾讯文档里的链接不能直接打开)2026-04-27 08:36:05
  • 天气预报链接(天气预报联网)2026-04-27 08:36:05
  • 公众号跳转链接怎么弄(公众号跳转链接怎么弄出来)2026-04-27 08:36:05
  • 对于有头指针和尾指针的单向链表 时间复杂度(对于一个头指针为h的带头结点的单链表)2026-04-27 08:36:05
  • 点击图片跳转链接软件叫什么(点击图片跳转链接软件叫什么名字)2026-04-27 08:36:05
  • 跳转链接(跳转链接怎么制作)2026-04-27 08:36:05
  • 带头尾指针的单链表(带头指针和尾指针的单循环链表区别)2026-04-27 08:36:05
  • 头指针为head的带头结点的单向循环链表(头指针head指向带头结点的单循环链表的条件是啥)2026-04-27 08:36:05
  • 全屏图片