数据结构_冒泡排序链表版_c
#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #include <ctype.h> #include <conio.h> /*getch()所在头文件是conio.h。而不是stdio.h*/ #define MAXLEN 100 #define MAX 60 typedef struct node { int data; struct node *link; }node; /*带头结点的链表的冒泡( 如果不带头结点,任然使用该函数,那么第一个元素(表头)将没有参加排序,可以考虑后期打个补丁,用直接插入的方法解决表头) 或者,从外部创建一个头结点接上去拍好后在释放掉它*/ void bubblesort_link(const node*head)/*head是链表头结点(而非表头)*/ { node *pre,/* 前结点指针 */ *p,/* 中结点指针p = pre->link; 排序关系表达式的LHS*/ *rear,/*后节点指针*/ *last;/*表尾结点指针*/ last = head; /*找到表尾指针*/ while(last->link) { last = last->link; } /*外层循环,控制循环次数/终止*/ while(last!=head->link)/*last要回溯;head->link是const类型的*/ { pre = head;/*每一轮开始,都将pre初始化尾head*/ p = pre->link;/* p (jin'gen)紧跟pre其后(同时,每一轮开始前,都将其置为表头结点*/ /*内层循环:LHS∈[head,last)(注意区间是左闭右开的,LHS为p的时候+)*/ while(p!=last)/*p是主要的被比较对象;last是每轮比较范围的右边界范围也是针对p指针的;比较到p是last的前一个元素即可,last通过是rear来访问*/ { rear = p->link;/*后指针rear紧跟p*/ /*若前者大于后者*/ if(p->data>rear->data)/* p是主要的被比较对象 */ { /*执行链表节点的交换;修改三个指针.*/ pre->link=rear; p->link = rear->link;/*顺序讲究,趁早访问第四个节点.*/ rear->link = p; /*检查last是否该向前回溯一个元素: 本轮的最后一次判断与操作可能使得右边界和边界的前驱发生交换,这就使得last所指的节点前移了一个元素.因此在这里要做一下修正(当然如果最后一次比较不发生交换,那也就不会进入到外层的if,不会执行多余的修正的.*/ if(last==rear)/*本轮的最后一组比较且需要发生交换操作,则修正之.*/ { last = p; }//if(内) }//if(外) /*接下来为辅助指针找到/修正 所指的节点*/ /*根据p与rear的比较是否发生交换,pre的更新可能仅两种,而无论是否发生位置交换,pre取的是rear和p中的较小者;*/ pre = (p->data<rear->data)?p:rear; p = pre->link;/*链表的位置已经是调整好了的找到一个对应关系,其余顺藤摸瓜*/ /*rear 的调整安排在while的开头*/ }//while(内层);离开此处后,p == last; /*收缩右边界,将p的前驱pre 赋给last*/ last = pre; }//while(外层) }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2023-05-15 LA@ML特征分解@奇异值分解@伪逆
2023-05-15 python_表情分类问题(主要是数据读取)_尚未降维
2023-05-15 js_基于async/await & Promise的异步编程实现电子时钟(秒表)+调试设计
2022-05-15 android_某些库中的资源文件values.xml大杂烩现象(多种类型的资源值都定义在同一个xml文件中)
2022-05-15 stackOverflow_删除自己stackOverflow上的回答(delete my answer on stackoverflow)