用链表实现插入排序

本文介绍了如何使用链表作为数据结构来实现插入排序。通过遍历链表,找到元素合适的位置并进行插入,达到排序的目的。不论是中间插入还是末尾插入,都能有效地更新链表的连接关系。
摘要由CSDN通过智能技术生成
#include <stdio.h>
#include <stdlib.h>               //由于要使用malloc()函数,需要加载该头文件

struct linked_list                        //创建结构体,即链表的每个节点,用于储存数据和下一个节点的地址
{
    int date;
    struct linked_list *next;
};

int main(void)
{
    int n;
    struct linked_list *p,*t,*head;
    head=p=t=NULL;
    scanf("%d",&n);                    //n用来限制排序的数目,及链表节点的个数

    while(n--)
    {
        p=(struct linked_list *)malloc(sizeof(struct linked_list));  //先用p指向一块动态内存,即一个节点
        scanf("%d",&p->date);

        if(NULL==head)                        //若是第一个节点,则将头指针指向该节点
        {
            head=p;
            p->next=NULL;
        }
        else                                            //若不是第一个节点,则需要
好的,以下是C++代码实现: ```c++ #include <iostream> using namespace std; // 定义链表节点结构体 struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(nullptr) {} }; // 定义插入排序函数 ListNode* insertionSortList(ListNode* head) { if (head == nullptr || head->next == nullptr) { return head; } ListNode *dummy = new ListNode(0); // 创建虚拟头节点 dummy->next = head; ListNode *lastSorted = head, *cur = head->next; // 初始化已排序区间和待排序指针 while (cur != nullptr) { if (lastSorted->val <= cur->val) { // 待插入节点在已排序区间之后 lastSorted = lastSorted->next; } else { // 待插入节点在已排序区间之前 ListNode *prev = dummy; while (prev->next->val <= cur->val) { prev = prev->next; } lastSorted->next = cur->next; cur->next = prev->next; prev->next = cur; } cur = lastSorted->next; } return dummy->next; } // 打印链表 void printList(ListNode *head) { while (head != nullptr) { cout << head->val << " "; head = head->next; } cout << endl; } int main() { // 创建链表 ListNode *head = new ListNode(3); head->next = new ListNode(1); head->next->next = new ListNode(5); head->next->next->next = new ListNode(2); head->next->next->next->next = new ListNode(4); cout << "Before sort: "; printList(head); head = insertionSortList(head); cout << "After sort: "; printList(head); return 0; } ``` 以上代码中,我们使用了链表的插入操作来实现插入排序。具体地,我们维护一个已排序区间,初始时只有一个节点,即链表的头节点;然后从第二个节点开始遍历链表,把它插入到已排序区间中合适的位置。这里需要用到两个指针,一个指向已排序区间的最后一个节点,另一个指向当前待排序的节点。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值