博客
关于我
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 的前面,并更新 sortheadcur

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

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

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

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

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

你可能感兴趣的文章
Open Graph Protocol(开放内容协议)
查看>>
Open vSwitch实验常用命令
查看>>
Open WebUI 忘了登入密码怎么办?
查看>>
open***负载均衡高可用多种方案实战讲解02(老男孩主讲)
查看>>
Open-E DSS V7 应用系列之五 构建软件NAS
查看>>
Open-Sora代码详细解读(1):解读DiT结构
查看>>
Open-Sora代码详细解读(2):时空3D VAE
查看>>
Open-Source Service Discovery
查看>>
open-vm-tools-dkms : 依赖: open-vm-tools (>= 2:9.4.0-1280544-5ubuntu3) 但是它将不会被安装
查看>>
open3d-Dll缺失,未找到指定模块解决
查看>>
openai Midjourney代理服务 gpt大模型第三方api平台汇总 支持国内外各种大模型 持续更新中...
查看>>
OpenAll:Android打开组件新姿势【仅供用于学习了解ButterKnife框架基本原理】
查看>>
OpenASR 项目使用教程
查看>>
Openbox-桌面图标设置
查看>>
opencart出现no such file or dictionary
查看>>
OpenCV 3.1 imwrite()函数写入异常问题解决方法
查看>>
OpenCV 4.1.0版drawContours
查看>>
opencv glob 内存溢出异常
查看>>
opencv Hog Demo
查看>>
opencv Hog学习总结
查看>>