博客
关于我
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出现 RuntimeError: dictionary changed size during iteration 的解决方法
查看>>
Python-numpy(2)数组的操作
查看>>
Python-Numpy的tile函数用法
查看>>
python-open函数
查看>>
Python-Pandas-将特定函数应用于给定级别-多索引数据框架
查看>>
python-queue队列通信
查看>>
python-ros No module named PyKDL
查看>>
python-social-auth 是否需要会话
查看>>
Python再获年度编程语言,微软或成最大赢家
查看>>
python-week5
查看>>
Python写表情包搜索工具(非常详细)零基础入门到精通,收藏这一篇就够了
查看>>
Python-【1】配置
查看>>
Python-从子文件夹执行绝对导入
查看>>
Python-刷新页面,直到元素可单击
查看>>
PYTHON-唤醒+VOSK+DEEPSEEK+离线合成-实现纯离线大模型问答
查看>>
Python-在Dash回调中重用函数
查看>>
PYTHON-基本数据类型-元祖类型,字典类型,集合类型
查看>>
python-外观模式
查看>>
Python-如何使用FastAPI和uvicorn.run而不阻塞线程?
查看>>
Python-字典
查看>>