博客
关于我
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基础——SQLite数据库基本操作
查看>>
Python基础——MySQL数据库基本操作
查看>>
Python基础_列表 list
查看>>
python系列【仅供参考】:python异步库调用gevent和asyncio对比
查看>>
python基础3
查看>>
Python基础08 面向对象的基本概念
查看>>
python系列【仅供参考】:python二进制转10进制
查看>>
Python基础-函数篇
查看>>
python基础---->常用模块
查看>>
Python基础(2):控制结构
查看>>
Python基础 | 关于“循环”那些事
查看>>
python系列【仅供参考】:python之subprocess模块rsync拉取文件
查看>>
python系列【仅供参考】:python 远程rdp
查看>>
python基础
查看>>
Python基本语法与变量类型
查看>>
python基本数据类型(容器)- tuple list dict set
查看>>
python基本工资的调整方案_Python薪资又涨了!这可咋办!
查看>>
Python基准测试和性能分析内存管理和垃圾回收
查看>>
Python基于RESTful风格的接口自动化测试实战
查看>>
python基于pygame实现跨年烟花效果
查看>>