链表实现冒泡排序

单链表的冒泡排序(C/C++实现) 前言 大家在做需要排名的项目的时候,需要把各种数据从高到低排序,如果用的冒泡排序的话,处理数组是十分简单的,因为数组的存储空间的连续的,可以通过下标就可以简单的实现,但如果是链表的话,是随机分配的,不能像数组那样通过下标就直接实现。所以在这里给大家介绍一个简单一点的冒泡排序 冒泡排序 冒泡排序的是交换排序其中的一种,主要思想是每一个元素与后一个元素比较,若这个元素大于后一个元素,则交换这两个元素的位置(这里采用从小到大排序),第一次排序后最后一个数已经变成了最大数,再进行n-2次排序即可完成(假设有n个数据 阅读详情
#include"stdio.h"
#include"stdlib.h"

typedef struct node
{
    int num;
    struct node *next;
}node;

node *head = NULL;
node *last = NULL;

void print()
{
    node *p = head;
    while( p != NULL)
    {
        printf("%d ",p->num);
	p = p->next;
    }
    printf("\n");
}

void create()
{
    int n = 6;
    node *p;
    while(n)
    {
        p = (node *)malloc( sizeof(node) );
	p->num = rand()%50+1;
	if( head == NULL)
	{
	    head = p;
	    last = p;
	}
	else
	{
	    last->next = p;
	    last = p;
	}
	last->next = NULL;
	n--;
    }
}

void sort()
{
    node *p,*q,*front;
    int i,j,flag;
    if( head == NULL || head->next == NULL)
    {
        return;
    }
    for( i = 0; i < 6 ; i++)
    {
        p = head;
        front = NULL;
	q = p->next;
	flag = 0;
        for( j = 0 ; j < 6-i-1;j++)
	{
	    if( p->num > q->num)
	    {
	        flag++;
	        if(front == NULL)
		{
		    p->next = q->next;
                    q->next = p;
		    head = q;
		}
		else
		{
		    p->next = q->next;
		    q->next = p;
		    front->next = q;
		}
		front = q;
		q = p->next;
	    }
	    else
	    {
	        front = p;
	        p = q;
	        q = p->next;
	    }
	}
	if( flag == 0)
	{
	    break;
	}
    }
}

int main()
{
    printf("正在产生随机数\n");
    create();
    printf("排序前:\n");
    print();
    sort();
    printf("排序后:\n");
    print();
    return 0;
}
 
 


 

用链表实现冒泡排序! 一、问题描述 存储数据不仅数组可以,链表也行。那么如何用链表实现冒泡排序呢? 我们需要把数据存储在链表中,然后调用排序函数就可以了。但必须要注意链表与数组的不同点,链表没有下标,要想访问数据域必须通过节点来访问。 二、代码实现 #include #include typedef int ElemType; typedef struct Node { ElemType pData 阅读详情

相关推荐

冒泡排序的链表实现

冒泡排序大家应该都很熟悉,不过平常都是用数组实现的,前几天参加了深信服的笔试,其中编程题第一个就是用链表实现冒泡排序,当时有点懵逼,所以我也不知道自己写的对不对,所以笔试后就认真看了一下这个。 用链表实现冒泡排序有两种方法:一种是交换节点,另一种就是只交换节点的值。

DreamtaleL 1060

万字长文,链表排序算法——冒泡排序、选择排序、插入排序、归并排序、快速排序、计数排序、桶排序、基数排序精讲及python实现

在数组排序中,常见的排序算法有:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序等。而对于链表排序而言,因为链表不支持随机访问,访问链表后面的节点只能依靠next指针从头部顺序遍历,所以相对于数组排序问题来说,链表排序问题会更加复杂一点。下面先来总结一下适合链表排序与不适合链表排序的算法:冒泡排序选择排序插入排序归并排序快速排序计数排序桶排序基数排序。希尔排序。堆排序。希尔排序为什么不适合链表排序?希尔排序:希尔排序中经常涉及到对序列中第。

白话机器学习 4819

冒泡排序(链表实现)

#include #include #include typedef struct node{ int data; struct node *next; }*BT; void BLine(BT &T,int a[10],BT &T1);//建立链表 void Arrange(BT &T,BT &T1);//对链表排序 int main(){

喜欢哲学的女孩 1164

【数据结构】-链表排序

我们从数组中选择一个元素,我们把这个元素称之为中轴元素吧,然后把数组中所有小于中轴元素的元素放在其左边, 所有大于或等于中轴元素的元素放在其右边,显然,此时中轴元素所处的位置的是有序的。从中轴元素那里开始把大的数组切割成两个小的数组(两个数组都不包含中轴元素),接着我们通过递归的方式,让中轴元素 左边的数组和右边的数组也重复同样的操作,直到数组的大小为1,此时每个元素都处于有序的位置。:首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。

knoci的博客 5619

双向链表中的冒泡排序实现方法

双向链表(Doubly Linked List)是一种常见的数据结构,它由一系列节点组成,每个节点都包含数据和两个指针:一个指向前一个节点的前驱指针和一个指向后一个节点的后继指针。与单向链表相比,双向链表的优势在于它可以从两个方向进行遍历,这使得在某些操作中,比如删除节点、查找节点等,能够更高效地执行。双向链表的特点如下:- 双向链表允许在任意节点之后插入新节点。- 可以通过前驱指针快速访问前一个节点,而单向链表无法这样做。- 双向链表的遍历可以向两个方向进行,即向前或向后。

weixin_34640289的博客 1192

Matlab子图排版终极指南:从tight_subplot到tiledlayout的实战对比

本文深入对比Matlab中两大子图排版工具:社区经典函数tight_subplot与官方现代布局管理器tiledlayout。针对默认subplot产生的子图间距与边缘距离问题,详细解析两者的设计哲学、参数控制与实战应用,帮助用户根据版本与需求选择最佳方案,实现高效、精确且美观的多子图排版。

weixin_29048309的博客 360

数据结构:链表的冒泡排序

【代码】数据结构:链表的冒泡排序。

weixin_50022690的博客 1047

英特尔SVS:十亿级向量搜索的硬件优化与LVQ压缩实战

向量搜索作为处理高维嵌入数据的核心技术,其核心原理是通过近似最近邻(ANN)算法在海量数据中快速找到相似项,以解决传统暴力搜索在规模上的瓶颈。这项技术的核心价值在于为推荐系统、图像检索、自然语言处理等AI应用提供高效的相似性匹配能力,尤其在RAG架构中成为连接非结构化数据与大语言模型的关键基础设施。面对十亿级数据带来的内存与算力挑战,局部自适应向量量化(LVQ)等压缩技术通过减少存储开销并保持精度,而硬件层面的深度优化则利用AVX-512等指令集大幅提升计算效率。本文聚焦于英特尔开源的Scalable Ve

weixin_42526310的博客 551

链表冒泡排序总结(C语言 两种解决方案)

在大一上学期,我们学了冒泡排序,选择排序,插入排序等等,而今天主要详解一下链表的冒泡排序的问题。(边看代码,边讲解) 首先,回顾一下,什么叫做冒泡排序。冒泡排序是一种时间复杂度在n的平方下的排序;每次循环都是比较前后两项,要么以从小到大排序,要么从大到小排序。 第一种: struct node *bubblesort(struct node *headptr)//接受头指针,链表的开端,首节点不...

计算机科学与技术专业学生的成长之路 1万+

数字IC后端实战:如何用ICC搞定复杂模块的floorplan与powerplan(附避坑指南)

本文深入解析数字IC后端设计中复杂模块的floorplan与powerplan实战技巧,重点介绍多边形模块边界处理、MTCMOS电源网络优化及存储器摆放陷阱规避。通过Synopsys ICC工具的具体操作示例和项目实战经验,帮助工程师高效解决设计难题,提升芯片性能与可靠性。

weixin_29213525的博客 349

【图数据库与知识图谱入门】2.2 图数据库 vs. 关系型数据库 vs. NoSQL数据库

本文对比了关系型数据库、NoSQL数据库和图数据库的核心差异与应用场景。关系型数据库以二维表结构为核心,适合结构化数据的事务处理(如MySQL),但多表关联查询性能随层级增加而下降。NoSQL数据库(如MongoDB)具有灵活schema,适合海量非结构化数据存储,但关联查询能力较弱。图数据库专注于节点-边关系建模,擅长处理复杂关联分析(如社交网络)。通过学生-课程案例展示了MySQL的多表JOIN操作和MongoDB的两种关联实现方式(内嵌文档和文档引用),揭示了不同数据库在数据关联处理上的本质区别。

kngines 1541

数组、单链表冒泡排序——C语言实现

数组冒泡排序 冒泡排序的原理 从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。 举例 假如有一堆数据: 进行第一轮比较 第一次:80与31比较,80 > 31,交换 第二次:80与-4比较,80 > -4,交换 第三次:80与36比较,80 > 36,交换 第四次:80与-8比较,80 > -8,交换 此时,第一轮结束,最大值80已经到了最右边,一共进行了四次比较 第二轮比较 (下面就不添加图片了) 第一

m0_47329175的博客 2503

飞塔防火墙之Link Monitor

Link Monitor类似于SLA,飞塔防火墙线路质量探测的一个功能。

weixin_41903258的博客 2404

单链表实现冒泡排序

单链表实现冒泡排序 /************************************************************************/ /* 用单链表实现冒泡排序,输入为0-9的数字字符 */ /******************************************************

Dream home 2万+

Open3D点云数据处理(二):读写点云,你真的会吗?

本文详细介绍了open3d加载点云、保存点云的方法,同时打印点云坐标、颜色、法向量等字段信息。

孙悟空 2604

基于 FPGA Vivado 示波器设计(附源工程)

今天给大侠带来基于 FPGA Vivado 示波器设计,开发板实现使用的是Digilent basys 3,如有想要入手basys3开发板的,可以联系牛总:18511371833。话不多说,上货。 本篇掌握基于添加文件和IP的Vivado工程设计流程,掌握基于Tcl的Vivado工程设计流程,学习示波器的基本组成结构。获取本篇相关源工程代码,可在公众号内回复“示波器设计源工程”。 原理介绍 数字存储示波器能够将模拟信号进行采样、存储以及显示。本系统在DIGILENT ...

7384

冒泡排序算法的单链表实现

引言: 这几天都在忙着参加几个工作室(别问为什么是“几个”,问就是海投)的考核,报的都是后台组。后台的考核中必定是少不了单链表ADT和排序算法的。本专栏将专攻排序算法部分。注意,是排序算法的单链表实现,而不是数组排序喔! 强烈建议有排序算法基础的人群食用。“基础”是指了解了这些排序算法如何在数组排序中编写。 那么,废话不多说,开始。 正文: 1)有关冒泡排序算法:这是个很形象的算法,因为用它排...

qi_ming_hao_nan的博客 3529

【例1896】report all clearance datasets 报告所有间隙数据集

report all clearance datasets 报告所有间隙数据集》这是一个NX二次开发官方小例子,下面是代码和解析。相较于混乱、未经验证的代码,官方案例能够确保开发者获得准确的开发方法,这些官方示例代码经过严格测试,能够正确地反映出NX软件的功能和API使用方式,有助于开发者系统地掌握NX二次开发技能,提高开发质量和效率。本专栏订阅后是永久阅读的。欢迎一起学习NX二次开发案例,逐步积累宝贵的经验,早日成为行业专家。

王牌飞行员_里海的博客 643

单链表实现冒泡排序算法

下面实现主要采用交换指针的方法,其中附加有单链表及其相关的实现 [cpp] view plain copy #include       struct Node;      typedef struct Node *PtrToNode;   typedef PtrToNode List;   typedef PtrToNode Positio

我的博客 9743

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

冒泡排序【数组、链表实现】

里面循环控制的是轮两两交换的次数n个元素两两交换需要n-1次,每轮会有一个最大或者最小元素放到最后需要交换的元素会减少,做过几轮就减少几个所以是n-i-1;外面循环用来控制进行几轮冒泡,进行n-1轮就行了;n-1轮后数组后面n-1个数已经是有序了,第一个自然就是最大(降序)或者最小(升序)了;冒泡排序的实现思路是通过一次次的两两交换把当前最大或者最小的元素放到最后面去,进行一定轮数这一过程最后就会得到一个有序序列。链表实现跟数组实现的思路是一样的,只是链表会涉及到两个结点的交换可能会麻烦一点。

m0_67246225的博客 952

温度PID控制PLC程序

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

C语言实现双向链表的创建与冒泡排序

本程序主要实现c语言双链表冒泡排序的功能,代码如下,需要者可以自取。(你电同学可以借鉴排序功能,但最好还是看懂后自己写) 难点分析:第一个交换需要引出前驱和最后一个的交换需要引出后继节点。 #include <time.h> #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Lnode { int data; struct Lnode

zhen_lx的博客 2055

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

用链表实现冒泡排序

根据冒泡排序:取得一个最大值或最小值放到尾部,遍历长度减1;如何将tail节点前移。循环遍历并作冒泡操作。

weixin_45480995的博客 459

java实现链表冒泡排序_单链表的冒泡排序

起因今天利用空余时间在九度做ACM的时候,需要对单链表进行排序,由于单链表不是随机存取结构,所以我不建议用快速排序,因此采用了冒泡排序!带头节点的尾插法构建单链表//初始化带头节点的链表struct lnode *head, *s, *r, *p;head = malloc(sizeof(struct lnode));r = head;for(i = 0; i < n; i ++){scan...

weixin_36035610的博客 1117

递归实现链表的冒泡排序。

/*经常通过链表方式处理问题。链表的 插删、合并、逆置、等等我们都通过非递归方法和递归方法实现过了,但是 冒泡排序 一直是用非递归的循环方法 进行处理,这两天突发奇想,为啥不用递归试一试呢?O(∩_∩)O~~然后好好想了一下,恕在下愚钝,最终代码写成这个样子已是极限,。 创建链表的函数和冒泡排序的函数,都是用递归。 思考:如何用递归实现冒泡排序?我觉得排序的代码应该是一样的,都是用中

qq973177663的专栏 1129

极客时间-排序-冒泡排序(链表实现)

import java.util.Random; public class LinkBubble { public Node head; private Integer num; public void init(int num,Node node) { this.num=num; this.head=node; } class Node{ private Integer data; private Node next; } /*使用尾插发创建链表.

哦绝影 291
上一篇: 鸟哥的 Linux 私房菜 -- 学习 bash shell
下一篇: 图解U-Boot:第一阶段源码分析
zhouxf_cn
博客等级 码龄14年 54粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值