首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C中对链表进行排序

在C语言中,链表是一种常见的数据结构,用于存储和管理一系列的元素。对链表进行排序是一种常见的操作,可以使用多种排序算法,如冒泡排序、插入排序、快速排序等。

以下是一个使用冒泡排序算法对链表进行排序的示例代码:

代码语言:c
复制
#include<stdio.h>
#include <stdlib.h>

// 定义链表节点结构体
typedef struct Node {
    int data;
    struct Node *next;
} Node;

// 创建新节点
Node *createNode(int data) {
    Node *newNode = (Node *)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

// 插入新节点
void insertNode(Node **head, int data) {
    Node *newNode = createNode(data);
    if (*head == NULL) {
        *head = newNode;
    } else {
        Node *temp = *head;
        while (temp->next != NULL) {
            temp = temp->next;
        }
        temp->next = newNode;
    }
}

// 冒泡排序链表
void bubbleSort(Node **head) {
    int swapped, i;
    Node *ptr1;
    Node *lptr = NULL;

    // 遍历链表
    for (i = 0; i < 10; i++) {
        swapped = 0;
        ptr1 = *head;

        // 比较相邻元素并交换
        while (ptr1->next != lptr) {
            if (ptr1->data > ptr1->next->data) {
                int temp = ptr1->data;
                ptr1->data = ptr1->next->data;
                ptr1->next->data = temp;
                swapped = 1;
            }
            ptr1 = ptr1->next;
        }
        lptr = ptr1;

        // 如果没有交换,则链表已经排序完成
        if (swapped == 0) {
            break;
        }
    }
}

// 打印链表
void printList(Node *head) {
    while (head != NULL) {
        printf("%d ", head->data);
        head = head->next;
    }
}

int main() {
    Node *head = NULL;

    // 向链表中插入元素
    insertNode(&head, 5);
    insertNode(&head, 1);
    insertNode(&head, 9);
    insertNode(&head, 3);
    insertNode(&head, 7);

    // 打印原始链表
    printf("Original list: ");
    printList(head);

    // 对链表进行排序
    bubbleSort(&head);

    // 打印排序后的链表
    printf("\nSorted list: ");
    printList(head);

    return 0;
}

在这个示例中,我们使用冒泡排序算法对链表进行排序,并且在排序完成后打印排序后的链表。

需要注意的是,这只是一个示例代码,实际应用中可能需要根据具体情况进行修改和优化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

链表进行插入排序链表

题目 链表进行插入排序。 ? 插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。...每次迭代时,从输入数据移除一个元素(用红色表示),并原地将其插入到已排好序的链表。 插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。...每次迭代,插入排序只从输入数据移除一个待排序的元素,找到它在序列适当的位置,并将其插入。 重复直到所有输入数据插入完为止。...2.2 链表做法 class Solution { public: ListNode* insertionSortList(ListNode* head) { if(!...while(cur) { nt = cur->next;//下一个待遍历的元素 if(cur->val >= tail->val)//大于已排序的结尾

48310
  • C语言每日一题(60)链表进行插入排序

    题目链接 力扣网 147 链表进行插入排序 题目描述 给定单个链表的头 head ,使用 插入排序 链表进行排序,并返回 排序链表的头 。...插入排序 算法的步骤: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代,插入排序只从输入数据移除一个待排序的元素,找到它在序列适当的位置,并将其插入。...链表进行插入排序。...示例 1: 输入: head = [4,2,1,3] 输出: [1,2,3,4] 示例 2: 输入: head = [-1,5,3,4,0] 输出: [-1,0,3,4,5] 提示: 列表的节点数...[1, 5000]范围内 -5000 <= Node.val <= 5000 思路分析 知识点:链表、插入排序 解析: 设置一个哨兵位,方便我们进行插入,接下来说明一下需要定义的指针变量 1.lastsorted

    8710

    Hibernate Search 5.5 搜索结果进行排序

    “秩序,秩序”- 有时不仅仅下议院尊敬的议员需要被喊着让排序,而且特殊情况下 Hibernate 的查询结果也需要排序。...就像这样,仅仅通过一个 Sort 对象全文本查询执行之前,特殊的属性进行排序。...在这个例子,这些可以被排序属性称之为“文本值属性”,这些文本值属性比传统的未转化的索引的方法有快速和低内存消耗的优点。 为了达到那样的目的。...注意, 排序字段一定不能被分析的 。例子为了搜索,你想给一个指定的分析属性建索引,只要为排序加上另一个未分析的字段作为 title 属性的显示。...如果字段仅仅需要排序而不做其他事,你需要将它配置成非索引和非排序的,因此可避免不必要的索引被生成。 不改变查询的情况下 ,排序字段的配置。

    2.9K00

    Leetcode No.147 链表进行插入排序

    一、题目描述 链表进行插入排序。 给定单链表的头指针,使用插入排序链表进行排序,然后返回已排序链表的头指针。 从第一个元素开始,该链表可以被认为已经部分排序。...每次迭代时,从输入数据移除一个元素,并原地将其插入到已排好序的链表。 插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。...对于单向链表而言,只有指向后一个节点的指针,因此需要从链表的头节点开始往后遍历链表的节点,寻找插入位置。 链表进行插入排序的具体过程如下。 1....首先判断给定的链表是否为空,若为空,则不需要进行排序,直接返回。 2. 创建哑节点 dummyHead,令 dummyHead.next = head。...引入哑节点是为了便于 head 节点之前插入节点。 3. 维护 lastSorted 为链表的已排序部分的最后一个节点,初始时 lastSorted = head。 4.

    29920

    【Leetcode -147.链表进行插入排序 -237.删除链表的节点】

    Leetcode -147.链表进行插入排序 题目: 给定单个链表的头 head ,使用 插入排序 链表进行排序,并返回 排序链表的头 。...每次迭代,插入排序只从输入数据移除一个待排序的元素,找到它在序列适当的位置,并将其插入。 重复直到所有输入数据插入完为止。...第一次迭代排序好的链表: 第二次迭代: 第二次迭代排序好的链表: 第三次迭代: 第三次迭代排序好的链表: 第四次迭代: 第四次迭代排序好的链表,此时cur为空,循环结束: 代码和注释...链表的所有值都是 唯一的,并且保证给定的节点 node 不是链表的最后一个节点。 删除给定的节点。注意,删除节点并不是指从内存删除它。这里的意思是: 给定节点的值不应该存在于链表。...示例 1: 输入:head = [4, 5, 1, 9], node = 5 输出:[4, 1, 9] 解释:指定链表中值为 5 的第二个节点,那么调用了你的函数之后,该链表应变为 4 -> 1

    8210

    Pythonlist进行排序

    很多时候,我们需要对List进行排序,Python提供了两个方法 给定的List L进行排序, 方法1.用List的成员函数sort进行排序 方法2.用built-in函数sorted进行排序(从2.4...开始) 这两种方法使用起来差不多,以第一种为例进行讲解: 从Python2.4开始,sort方法有了三个可选的参数,Python Library Reference里是这样描述的 cmp:cmp specifies...] 以上给出了6List排序的方法,其中实例3.4.5.6能起到以List item的某一项 为比较关键字进行排序....'b',3),('c',2)] >>> L.sort(key=lambda x:x[1]) >>> L >>>[('d', 2), ('c', 2), ('b', 3), ('a', 4)] 我们看到,...此时排序过的L是仅仅按照第二个关键字来排的,如果我们想用第二个关键字 排过序后再用第一个关键字进行排序呢?

    2.4K20

    C 单向链表排序_单向链表排序java

    链表排序 链表排序的两种方式 一、交换结点的数据域 二、断开链表,重新形成 方法 示例 链表排序的两种方式 一、交换结点的数据域 有很多种方法,比如冒泡排序,选择排序等其他排序方法...,重新形成 方法 跟三指针法反转链表类似,也是要定义三个结构体指针。...第一步: 第一个指针用于找最小值 第二个指针用于指向最小值的前一个结点 第三个指针用于遍历链表 第二步: 让最小值从链表当中脱离出来 第三步: 然后再定义一个新的指针,用头插法把指向最小值的指针...形成新的链表,通过调整新链表结点的插入方法和在原链表找最值得到升序或降序的效果。...) //结点数据域比较 { pMin_prev = p; //标记 pMin = p->next; } p = p->next; } //2、将最值结点脱离出原链表 if(pMin == head)

    64340

    ​LeetCode刷题实战147:链表进行插入排序

    今天和大家聊的问题叫做 链表进行插入排序,我们先来看题面: https://leetcode-cn.com/problems/insertion-sort-list/ Sort a linked list...题意 链表进行插入排序。 ? 插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。...每次迭代时,从输入数据移除一个元素(用红色表示),并原地将其插入到已排好序的链表。 插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。...每次迭代,插入排序只从输入数据移除一个待排序的元素,找到它在序列适当的位置,并将其插入。 重复直到所有输入数据插入完为止。...,和数组的插入排序一样,只不过是链表而已,这里用的都是单向链表,涉及到以下操作: 1.

    23320

    每日一题2-链表进行插入排序

    链表进行插入排序 链表进行插入排序 示例 1: 输入: 4->2->1->3 输出: 1->2->3->4 示例 2: 输入: -1->5->3->4->0 输出: -1->0->3->4->5...i 文字描述: 遍历链表,第一个元素默认是有序的 遍历过程 记录, 有序链表 开始位置: 是否固定下来 ?...head是否改变2个方式 遍历过程 记录, 结束位置 : 如果有序,怎么办 ? 如果无顺序怎么办? 约束条件是什么?...* pre = NULL;//插入排序需要插入记录位置,每次都需要重新计算 //从第一个元素开始遍历链表,假设第一个元素是有序的 while(cur) {...存在插入规则,是固定节点后面插入 } // pre <temp < pre-next //插入过程 类似节点翻转最前面位置(pre

    56620

    JavaScript 对数组进行排序

    排序是您在学习JavaScript时将使用的众多基本方法之一。让我们回顾一下如何不同的数据类型使用排序方法。 ---- 字符串 默认情况下, 排序方法按字母顺序组织其元素。...names.sort() console.log(sortNames) //['Cooper', 'Emmy', 'Fletcher', 'Izzy', 'Sophie'] 我们也可以很容易地以相反的顺序这个数组进行排序...(在后面的示例,此示例将有一个更广泛的版本!在此示例,我们将使用 slice() 并将带有注入数字的字符串转换为数字。这样,我们就可以对所有数组元素进行排序,其中每个元素都是相同的数据类型。...本例,我们将使用正则表达式。 正则表达式(Regex)是组成搜索模式的字符序列。搜索模式可用于文本搜索和文本替换操作。 (当第一次面对Regex时,它真的很吓人。我个人还是觉得很困惑。.../ \d 代表数字 +意味着, ' 1次或以上' 所以,总的来说,正则表达式使我们能够找到大于9的元素并对数组的元素进行排序

    4.8K70

    链表进行插入排序 算法解析

    一、题目 1、算法题目 “给定一个链表的头,使用插入排序链表进行排序,返回排序链表的头。” 题目链接: 来源:力扣(LeetCode) 链接: 147....链表进行插入排序 - 力扣(LeetCode) 2、题目描述 给定单个链表的头 head ,使用 插入排序 链表进行排序,并返回 排序链表的头 。...插入排序 算法的步骤: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代,插入排序只从输入数据移除一个待排序的元素,找到它在序列适当的位置,并将其插入。...下面是插入排序算法的一个图形示例。部分排序的列表(黑色)最初只包含列表的第一个元素。每次迭代时,从输入数据删除一个元素(红色),并就地插入已排序的列表链表进行插入排序。...插入排序的主要思路就是维护一个有序序列,每次将新元素插入到已经排好序的有序表,直到所有元素都插入到这个有序序列

    29710

    链表进行插入排序

    链表进行插入排序。 ? 插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。...每次迭代时,从输入数据移除一个元素(用红色表示),并原地将其插入到已排好序的链表。 插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。...每次迭代,插入排序只从输入数据移除一个待排序的元素,找到它在序列适当的位置,并将其插入。 重复直到所有输入数据插入完为止。...提前用dummy记录,然后利用predummy第一层的操作可以让dummy一直指向最前面的牌。...类似于交换链表 class Solution: def insertionSortList(self, head: ListNode) -> ListNode: dummy =

    29020

    使用 Python 波形的数组进行排序

    本文中,我们将学习一个 python 程序来波形的数组进行排序。 假设我们采用了一个未排序的输入数组。我们现在将对波形的输入数组进行排序。...− 创建一个函数,通过接受输入数组和数组长度作为参数来波形的数组进行排序。 使用 sort() 函数(按升序/降序列表进行排序)按升序输入数组进行排序。...例 以下程序使用 python 内置 sort() 函数波形的输入数组进行排序 − # creating a function to sort the array in waveform by accepting...例 以下程序仅使用一个 for 循环且不带内置函数以波形输入数组进行排序 - # creating a function to sort the array in waveform by accepting...结论 本文中,我们学习了如何使用两种不同的方法给定的波形阵列进行排序。与第一种方法相比,O(log N)时间复杂度降低的新逻辑是我们用来降低时间复杂度的逻辑。

    6.8K50

    LUAMap进行排序

    Lua中最常见的数据结构就是Table, 用Table表示Map很容易, 但早期Lua没有提供一个针对Map数据结构的排序方法,下面用Moonscript实现了一个Map型数据结构排序函数方法。...比如,我们统计某些元素的个数时,[["a", 100], ["b",10],["c",1]]这种数据结构,元素的个数都比较少的,简单的排序算法都可以解决,数据变大时,我们可能会采用更复杂的算法去实现。...其实实现的原理比较简单,就是用两个Table,分别存储Map的Key与Value,用比较简单的冒泡排序或是选择排序Key的Table结构进行排序排序的过程中移动TableKey的存储位置的同时,...也安对应的下标移动Value数组的位置,这样当Key排序好的同时,Value也被排序好了。...降序排序: ? 升序和降序的方法比较简单,直接将与max比较的“>”大于号,改成小于号,或是想反。 升序排序: ?

    3.4K20
    领券