欢迎光临散文网 会员登陆 & 注册

链表排序的思路以及基本的gdb调试命令

2023-02-19 10:04 作者:秋名山西  | 我要投稿

一、链表排序

链表分为单链表和双链表,双链表的排序适合快速排序,这个在c语言库函数中使用sort进行了实现。但是单链表并不适合使用快速排序。因此我们可以使用插入排序、选择排序、冒泡排序等方法。注意:链表不一定会有头结点,但是一定会有一个头指针。特别是如何在不改变原链表指针指向的情况下交换两个节点

1、选择排序

选择排序的思路:选出一个数,假定它是最小/最大值,然后与无序队列中的元素进行比较,直到找出最小值,然后交换数据。

具体做法:重新定义两个链表指针,一个指针指向当前操作的链表节点,取名为p,另一个取名为min,指向本轮排序中数值最小的节点。与数组排序不同的是,数组是记录最小值元素的下标,这里是记录数值最小的节点的指针。

这里需要注意传入的链表是否有头结点,一般有头结点的链表会在创建链表时创建一个头结点(数据域无效或者存储链表节点数)。

2、插入法排序

思路:创建一个有序数列,从原来的无序数列中取出一个数,插入有序数列中。

具体做法:链表中需要创建一个新的链表,用来保存排序好的链表节点。同样的,这里也需要定义一个cur指针,指向原链表当前被操作的节点,sortCur指向有序链表的当前被操作的节点。prev指向当前被操作的节点的前一个节点。与选择法不同的是,这里是新节点插入链表,而不是两个节点的数据交换。


链表排序的思路以及基本的gdb调试命令的评论 (共 条)

分享到微博请遵守国家法律