博客
关于我
OJ.对链表进行插入排序
阅读量:624 次
发布时间:2019-03-13

本文共 1728 字,大约阅读时间需要 5 分钟。

链表中的插入排序插入排序是一种常用的排序算法,特别适用于线性数据结构的排序。如果你对插入排序的逻辑有疑问,不妨接下来仔细了解一下代码实现,从而更好地理解这一算法的原理。

以下是链表插入排序的实现代码:

typedef struct ListNode {    int val;    struct ListNode* next;};struct ListNode* insertionSortList(struct ListNode* head) {    if (head == NULL || head->next == NULL) {        return head;    }    struct ListNode* sorthead = head;    struct ListNode* cur = head->next;    sorthead->next = NULL;    while (cur) {        struct ListNode* post = cur->next;        if (cur->val <= sorthead->val) {            cur->next = sorthead;            sorthead = cur;        } else {            struct ListNode* sortPrev = sorthead;            struct ListNode* sortNext = sortPrev->next;            while (sortNext) {                if (sortNext->val >= cur->val) {                    sortPrev->next = cur;                    cur->next = sortNext;                    break;                } else {                    sortPrev = sortNext;                    sortNext = sortNext->next;                }            }            if (sortNext == NULL) {                sortPrev->next = cur;                cur->next = NULL;            }        }        cur = post;    }    return sorthead;}

代码实现步骤详解:

代码从头节点开始,依次处理链表中的每个节点。初始时,sorthead 指向链表的第一个节点,cur 则从第二个节点开始遍历。通过 while 循环,逐个处理每个节点的插入逻辑。

当当前节点 cur 的值小于或等于 sorthead 的值时,说明 cur 应该插入到 sorthead 之前。我们将 cur 插入到 sorthead 的前面,并更新 sorthead 为 cur。

如果 cur 的值大于 sorthead 的值,我们进入后续逻辑。在 sortPrev 和 sortNext 两个指针之间寻找插入位置。我们不断向后移动 sortPrev 和 sortNext,直到找到合适的位置插入 cur节点。

如果在遍历过程中没有找到合适的位置(即 sortNext 遍历到终止),说明当前节点是链表最大的值,需要尾插。将其插入到 sortPrev 的后面。

这种方法的时间复杂度是 O(n^2),因为在最坏的情况下需要对每个节点进行多次比较操作。尽管如此,这种算法的实现相对简单,而且对于小规模数据集来说是非常高效的。

通过这种方式,我们可以清晰地看到插入排序的逻辑,理解其原理和实现细节。这一算法的关键在于合理地将未排序的节点依次插入到已排序链表的适当位置,以逐渐形成一个有序链表。

转载地址:http://wmzaz.baihongyu.com/

你可能感兴趣的文章
python基础篇(1):type()
查看>>
python基础篇(15):闭包
查看>>
python基础篇(14):多态
查看>>
python基础篇(13):类型注解
查看>>
python基础篇(12):继承
查看>>
python基础篇(11):封装
查看>>
python基础篇(10):自定义包
查看>>
python基础篇(10):类、对象与构造方法
查看>>
python系列【仅供参考】:python测试javaSDK总结
查看>>
python系列【仅供参考】:python斗地主
查看>>
Python基础教程(第2版 修订版) pdf
查看>>
python基础实践(四)
查看>>
Python基础学习笔记(九)常用数据类型转换函数
查看>>
Python基础学习参考(五):字符串和编码
查看>>
Python基础学习
查看>>
python基础变量之---集合
查看>>
python基础变量之---字典
查看>>
python基础变量之---列表
查看>>
python基础变量之---元组
查看>>
python基础内容_Python基础入门必须了解的
查看>>