C语言单链表的3种排序算法,插入排序,冒泡排序,选择排序

C 单向链表排序 链表排序链表排序的两种方式一、交换结点的数据域二、断开链表,重新形成方法示例 链表排序的两种方式 一、交换结点的数据域 有很多种方法,比如冒泡排序,选择排序等其他排序方法 struct Node *link_sort(struct Node *head) { int value; struct Node *p = head; struct Node *q = NULL; while(p) { q = p->next; while(q) { if(p->data &g 阅读详情
//插入排序
stu *view_sort_math(stu *head)  
{  
    struct student *first;
    struct student *t;  
    struct student *p;   
    struct student *q;   

    first = head->next;   
    head->next = NULL;

    while (first != NULL)   
    {  
        for (t = first, q = head; ((q != NULL) && (q->chinese > t->chinese)); p = q, q = q->next);   

        first = first->next;

        if (q == head)   
        {  
            head = t;  
        }  
        else
        {  
            p->next = t;  
        }  
        t->next = q;

    }  
    return head;  
}

//冒泡排序
stu *view_sort_chinese(stu *h)         
{
    stu *endpt,*u,*v,*p;     
    u = (stu *)malloc(sizeof(stu));   
    u->next=h;   
    h=u;   
    for(endpt=NULL;endpt!=h;endpt=p)
    {
        for(p=u=h;u->next->next!=endpt;u=u->next)  
        {
            if(u->next->chinese < u->next->next->chinese)
            {                            
                v=u->next->next;   
                u->next->next=v->next;   
                v->next=u->next;   
                u->next=v;   
                p=u->next->next;   
            }
        }
    }
    u=h;   
    h=h->next;       
    return h;
}

//选择排序
stu *view_sort_c(stu *shead)
{  
    struct student *pfirst;       
    struct student *ptail;         
    struct student *pminBefore;  
    struct student *pmin;         
    struct student *p;             

    pfirst = NULL;  
    while (shead != NULL)         
    {      
        for (p = shead, pmin = shead; p->next != NULL; p = p->next)
        {  
            if (p->next->math > pmin->math)
            {  
                pminBefore = p;           
                pmin       = p->next;      
            }  
        }     

        if (pfirst == NULL)     
        {  
            pfirst = pmin;      
            ptail  = pmin;      
        }  
        else                    
        {  
            ptail->next = pmin;
            ptail = pmin;       
        }  


        if (pmin == shead)        
        {  
            shead = shead->next;   
        }  
        else   
        {  
            pminBefore->next = pmin->next;   
        }  
    }  

    if (pfirst != NULL)       
    {  
        ptail->next = NULL;
    }  
    shead = pfirst;  
    print_stu_list(shead);
    return shead;
}
单向链表的排序(使用冒泡排序交换节点) 文章内容: 第一点:首先我们谈一谈有关链表的储存问题,首先我希望大家记住一各准则:链表的头指针尽量不要用来存储数据,为什么?因为这样会使你处理数据时更加的方便,方便在哪里?如果头指针不放数据的话,那么你在处理数据的时候,就可以将所有数据都统一对待?有的同学可能会有疑惑,结合排序说一下吧?排序的话其实就是改变各链节中的指针的指向,因为你链表的本质就是通过指针将多个链节(结构体)连接在一起,而排序就是改变链节的先后顺序,而改变它的顺序就是要改变其前后连接的的指针的指向。好讲到这里我问再回到我们最开始的问题:为什 阅读详情

相关推荐

数据结构(C语言第2版) 课后习题答案之 第八章 排序

目录 第8章 排序 1.选择题 2.应用题 (1)设待排序的关键字序列为{12,2,16,30,28,10,16*,20,6,18},试分别写出使用以下排序方法,每趟排序结束后关键字序列的状态。 3.算法设计题 (1)试以单链表为存储结构,实现简单选择排序算法。 (2)有n个记录存储在带头结点的双向链表中,现用双向冒泡排序法对其按上升序进行排序,请写出这种排序的算法。 (3)设有顺序放置的n个桶,每个桶中装有一粒砾石,每粒砾石的颜色是红,白,蓝之一。 (4)编写算法,对n个关键字取整数值.

Yummy的博客 8900

C语言数据结构-实现单链表的简单选择排序

后来把每一步的排序都输出一遍分析问题,发现是因为每次找最小值的时候,minp没有改,一直保持着上一次找到的值,就很有问题.....导致第一个是对的,后面全乱序......然后立马想到简单选择排序在数组中是用赋值语句替换,难道链表就不能用赋值语句替换吗,我只是换了个数值而已,又不是改变指针指向关系。(说明当时学链表的时候学魔怔了,满脑子改指针哈哈哈哈!我第一反应是:插入数据,删除数据,插入数据,删除数据......反复进行实现替换。其实无论是链表还是顺序表,简单选择排序的算法都是不变的,核心思想也是一样的。

zyqmeinv的博客 1607

C语言——链表排序

单链表排序 前言: 最近总结了一下针对只有头结点的单链表进行排序的几个简单的方法。 交换节点:插入排序,冒泡排序,简单选择排序 交换数据:快速排序 初始化: #include <stdio.h> #include <stdlib.h> #include <stdbool.h> //节点结构 struct node { int val;...

qq_41481924的博客 1万+

C语言创建单向链表并将内容排序

C语言创建单向链表并将内容排序

Gaara01193的博客 512

「大模型学习」(11)kv cache与vllm详解,一文读懂!

Key(键):表示上下文的特征。Value(值):表示上下文的内容。Query(查询):表示当前 token 的查询向量。AttentionQKVsoftmaxQKTdkVAttentionQKVsoftmaxdk​​QKT​V),每次生成一个新 token(比如下一个词),模型会再次查看之前的所有K和V,以计算当前 token 的注意力。问题:每次都重新计算之前的 K/V 很浪费!项目维度(简化)含义Q当前 token 的查询向量。

qq_43044037的博客 5405

OpenCV实战:如何用Debevec算法搞定相机响应函数(附完整代码)

本文详细介绍了如何使用OpenCV实现Debevec算法计算相机响应函数(CRF),并应用于HDR图像合成。通过完整的代码示例和工程实践问题解决方案,帮助开发者掌握从原理到实现的关键步骤,提升高动态范围成像和计算机视觉任务的处理能力。

weixin_29061041的博客 229

数据结构之单链表的排序(C语言实现)

数据结构之单链表的排序 一、 实现的步骤 1、生成一个单链表 2、对生成的链表排序 二、实现代码 #include

qq_42752472的博客 6640

OrCAD Capture CIS 17.4 原理图绘制

OrCAD Capture CIS 17.4 原理图绘制

qq_38960013的博客 7633

C语言单链表按数字大小排序,C语言单链表的3种排序算法,插入排序,冒泡排序,选择排序...

//插入排序stu *view_sort_math(stu *head){struct student *first;struct student *t;struct student *p;struct student *q;first = head->next;head->next = NULL;while (first != NULL){for (t = first, q = he...

weixin_30546201的博客 809

Xilinx GTY Transceiver时钟方案与功耗优化实践

本文详细解析了Xilinx GTY Transceiver的时钟方案设计与功耗优化实践,涵盖从基础配置到高速24.33024Gbps和中速10.1376Gbps的实战案例。通过Transceivers Wizard的IP设计技巧和动态功耗优化方法,帮助工程师有效降低FPGA系统功耗,提升高速串行通信的稳定性与效率。

weixin_28736355的博客 228

5套高颜值AI漫剧女主设定图!直接拿去做漫剧(附完整提示词)

左侧特写放大表现暖棕眼妆、豆沙唇、红宝石首饰、发丝与针织纹理,四个视图严格保持同一人物脸模、发色、服装、首饰和身体比例,柔和复古棚拍光,低饱和酒红与奶油色配色,真实布料、皮革、金属与宝石材质,高级精致角色资产设定图,高清8K。佩戴珍珠与透明水晶耳坠、纤细珍珠项链;左侧特写放大至胸部以上,清晰表现皮肤、眼妆、发丝、耳饰和针织材质,人物四个视图保持同一脸模、发型、服装、饰品和身体比例,柔和棚拍漫射光,轻微地面阴影,高级细腻材质,真实发丝,细腻皮肤,高精度角色资产设定图,高清8K质感。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 1643

用三种排序算法(主元,插入,冒泡)对链表排序

【代码】用三种排序算法(主元,插入,冒泡)对链表排序。

2301_79013454的博客 543

【Java基础知识 1】Java入门级概述

优快云最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。

学Java,找哪吒 16万+

3种简单排序算法——冒泡,选择,插入排序

1.冒泡排序 就是从最左边开始,重复地访问要排序的数列,一次比较两个元素,如果他们的顺序错误,就把他们交换。通过一次次的比较,越大的元素会通过交换慢慢“浮”到数列的顶端,故名“冒泡”。是稳定的排序算法。 实现: 常规实现 public class BubbleSort { public static void main(String[] args) { int[]

黄国攀的博客 580

ESP32-C3入门教程 环境篇②——Windows开发环境准备

文章目录一、注意事项二、下载ESP-IDF工具安装器三、安装内容四、详细安装步骤报错处理 一、注意事项 请注意 ESP-IDF 和 ESP-IDF 工具的安装路径不能超过 90 个字符,安装路径过长可能会导致构建失败。 Python 或 ESP-IDF 的安装路径中一定不能包含空格或括号。 除非操作系统配置为支持 Unicode UTF-8,否则 Python 或 ESP-IDF 的安装路径中也不能包括特殊字符(非 ASCII 码字符、中文字符) 二、下载ESP-IDF工具安装器 ESP-IDF Win

5242

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

单链表的冒泡,快排,选择,插入,归并5种排序算法详解(多图+代码实现)

上节介绍了链表的基本操作https://blog.youkuaiyun.com/qq_16933601/article/details/105125038。 这节介绍链表的5种排序算法。 文章目录0.稳定排序和原地排序的定义1.冒泡排序2.快速排序3.插入排序4.选择排序5.归并排序 0.稳定排序和原地排序的定义 稳定排序:   假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的...

嵌入式与Linux那些事的博客 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

单链表排序

前言:最近总结了一下针对只有头结点的单链表进行排序的几个简单的方法。交换节点:插入排序,冒泡排序,简单选择排序 交换数据:快速排序初始化:#include <stdio.h> #include <stdlib.h> #include <stdbool.h>//节点结构 struct node { int val; struct node * next; }; typedef str

LSGOZJ的博客 5万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【C语言】数据结构——排序(一)

今天我们来学习排序,包括直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快排以及归并排序。 冒泡排序,快排和归并排序我们放在之后分析,今天主要来分析前面的。

qq_64818885的博客 1481

C语言数据结构:链表、栈与队列、排序算法与查找算法深度解析

在计算机科学中,C语言数据结构和算法是程序设计的核心。它们不仅影响程序的正确性,还决定了程序的效率。掌握常用的数据结构和算法,是每个开发者必备的技能。本文将系统地介绍四个重要的基础知识点:链表、栈与队列、排序算法(冒泡排序、快速排序、插入排序)以及查找算法(线性查找、二分查找)。这些基础内容是构建高效程序的基石。链表是非常基础且常用的数据结构,在处理动态内存时尤为重要;栈与队列则是许多经典问题的基础,能够帮助我们高效地处理数据流;排序算法和查找算法则是对数据集合进行处理和查询的基础工具。

吴师兄大模型的博客 2052

写给自己看的单链表(3):冒泡排序和插入排序

搬运自我的优快云 https://blog.youkuaiyun.com/u013213111/article/details/88669851 !!!Attention:以下操作中的单链表均带有头结点!!!1.冒泡排序首先要获取单链表的长度n。冒泡排序的基本思路是:从某一方向开始,依次两两比较,把小的放左边,大的放右边。由于单链表的单向性,这里的“冒泡”并不是将更小的元素移到更前的位置,而是反...

dazhuhe6197的博客 182

链表的选择排序,冒泡排序,插入排序,快速排序代码

链表的简单选择排序、冒泡排序、直接插入排序、快速排序,也包括数组的实现

gaokuiyuan的博客 1379

C语言算法思维训练:排序、查找与链表的7天突破计划

在C语言编程领域,算法思维至关重要。排序、查找和链表操作是算法中的基础且核心的部分,熟练掌握这些内容能显著提升编程能力和解决实际问题的效率。本7天突破计划将带您系统学习这些知识,逐步建立起强大的算法思维。

星辰夜语的博客 1035

【初阶数据结构】深度解析七大常见排序|掌握底层逻辑与原理

本篇将介绍七大常见排序底层逻辑,有助于我们更好地理解不同排序的适用场景和效率上的差别。

专注于 C/C++ 后端开发,涵盖基础语法、Linux系统与网络、MySQL数据库、常见算法及项目经验。 6179

8.排序——数据结构(严蔚敏C语言版)

8.排序 8.1概念 1.什么是排序? 排序:将一组杂乱无章的数据按一定规律顺次排列起来。即,将无序序列排成一个有序序列(由小到大或由大到小)的运算。如果参加排序的数据结点包含多个数据域,那么排序往往是针对其中某个域而言。 8.2插入排序 8.2.1直接插入排序 1.基本思想: 每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。即边插入边排序,保证子序列中随时都是排好序的。 2.插入方法: 在插入a[i]前,数组a的前半段(a[0]----a[i-1

一个人的博客 2637
上一篇: C语言双向循环链表的生成,删除和打印
下一篇: C语言数组,顺序表的初始化,添加,删除和打印
卫水金波
博客等级 码龄12年 73粉丝 35原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值