链表实现直接选择排序

单链表上的简单选择排序算法 以单链表为存储结构实现简单选择排序的算法 立即下载
#include"stdio.h"
#include"stdlib.h"
/****************************************************
copyright: self_chou
Filename:  directsort.c
AUthour : self_chou   Version: 1.0     Date: 2012.07
Description: 用链表实现直接选择排序
Function List:
              find(); 寻找链表中最小的结点并返回
              change();交换链表中指定结点的位置
              sort(); 调用前两个函数实现功能
*******************************************************/

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

node *head = NULL;
node *last = NULL;
node *flag = NULL;      //用来记录结点交换的位置,从链表头开始
print()
{
    node *p = head;
    while(p != NULL)
    {
        printf("%d ",p->num);
	p = p->next;
    }
    printf("\n");
}

node * find(node *head)
{
    node *min = head;
    while(head != NULL)
    {
        if(head->num < min->num)         //找指定头结点链表中最小的结点
	{
	    min = head;
	}
	head = head->next;
    }
    return min;
}

void change(node *q,node *p)
{
    node *pfront = NULL;
    node *qfront = NULL;
    node *find = head;
    node *temp = NULL;
    if( p == q)                      //交换分,是不是头结点,和结点相不相邻,四种情况
    {
        flag = p;
        return;
    }
    while( find != q)
    {
        qfront = find;
	find = find->next;
    }
    find = head;
    while( find != p)
    {
        pfront = find;
	find = find->next;
    }
    if( pfront == NULL)
    {
        if( qfront == head)
	{
	    p->next = q->next;
	    q->next = p;
	    head = q;
	    flag = q;
	}
	else
	{
            temp = p->next;           //注意temp指向next,这儿犯错了。。。
	    qfront->next = p;
	    p->next = q->next;
	    q->next = temp;
	    head = q;
	    flag = q;
	}
    }
    else
    {
        if( qfront == p)
	{
	    pfront->next = q;
	    p->next = q->next;
	    q->next = p;
	    flag = q;
	}
	else
	{
	    temp = q->next;
	    pfront->next = q;
	    q->next =p->next;
	    qfront->next = p;
	    p->next = temp;
	    flag = q;
	}
    }

}

void sort()
{
    node *p = head;
    node *min = NULL;                //实现程序的主要功能
    int n = 4;
    while(p != NULL)
    {
        min = find(p);
	change(min,p);
	p = flag;
	p = p->next;
    }
}

int main()
{
    int i ;
    int get;
    printf("please input the six num:\n");
    for(i = 1;i <= 6;i++)
    {
        scanf("%d",&get);
        node *p = (node *)malloc(sizeof(node));
	p->num = get;
	if(head == NULL)
	{
	    head = p;
	    last = p;
	}
	else
	{
	    last->next =p;
	    last = p;
	}
	last->next = NULL;
    }
    printf("排序前\n");
    print();
    flag = head;
    sort();
    printf("排序后\n");
    print();
    return 0;
}


  




        
PyTorch实战:用FGSM攻击MNIST分类器(附可视化对比) 本文通过PyTorch实战演示了如何使用FGSM对抗攻击方法攻击MNIST手写数字分类器。文章详细解析了FGSM攻击原理,提供了从环境搭建、模型准备到攻击实施、可视化对比的完整代码实战流程,并探讨了对抗样本的生成与模型鲁棒性评估。 阅读详情

相关推荐

C++利用spdlog生成日志

C++利用spdlog生成日志下载编译spdlog配置并使用 环境:Win10-x64+VS2015 spdlog是一个快速的C++日志库,能够兼容C++11,具备快速、无需依赖第三方库、支持多线程、多平台的优良特性! 下载编译spdlog 1.第一步,下载spdlog 下载spdlog,下载地址:https://github.com/gabime/spdlog#header-only-version,从Github上下载zip压缩包。下载完成后会获取一个名为spdlog-1.x.zip的压缩包 2.第二步

weixin_42975610的博客 3216

设计一个用链表表示的直接选择排序算法,并用程序实现。

简单选择排序:已知待排序初始序列用单链表存贮,头指针head指向第一个结点,从这个待排序列中找出最小结点,插入head之后,用r来指示。r以前为已排序序列,r以后为未排序序列。再从未排序序列中找出最小结点插入r的后面,让r指向这个结点。算法说明:已知待排序初始序列用单链表存贮,头指针head指向第一个结点,从这个待排序列中找出最小结点,插入head之后,用r来指示。r以前为已排序序列,r以后为未排序序列。再从未排序序列中找出最小结点插入r的后面,让r指向这个结点。输入要排序的数据,以空格间隔。

qq_52052302的博客 554

CNN卷积神经网络手写数字识别实例及代码详解

本文的代码来自githup的Deep Learning的toolbox,是用Matlab实现的。感谢该toolbox的作者付出和分享。 我在应该该代码进行训练时,出现一些报错,如expand函数应用不对,flipall函数未定义等问题,对这些问题进行了修正,完成网络训练和验证。 本文mnist_uint8.mat的获取可以参照我的另一篇博客:MNIST数据库处理--matlab生成mnist_

VivienFu的专栏 6万+

单链表实现选择排序

算法思路 单链表实现选择排序的方法有很多种,我的方法是将一个链表分为三部分: 第一部分 + p1 + 第二部分+ p2 + 第三部分 第一部分的链表存的是P1之前的所有结点,第二部分的链表存的是p1-p2之间所有的结点,第三部分的链表存的是p2后面的所有结点,然后每次for循环时分8种情况(每个部分存在与否)对三个链表和p1 p2进行组合,最后即可对链表进行选择排序。 代码实现 #include<stdio.h> #include<stdlib.h> typedef st

Mr_middle的博客 2995

Python+Appium实现泛微OA自动打卡:5分钟搭建移动端自动化脚本

移动端自动化测试是软件测试与办公自动化领域的重要技术方向,其核心原理是通过程序模拟用户对手机应用界面的操作,实现重复性任务的自动执行。Appium作为主流的开源移动端自动化框架,基于WebDriver协议,支持跨平台且无需修改被测应用,为自动化脚本开发提供了标准化接口。在工程实践中,结合Python简洁的语法和丰富的生态,可以快速构建稳定可靠的自动化解决方案。这一技术组合的价值在于能够高效处理“重复性、低价值、高频率”的日常操作,例如考勤打卡、数据填报等办公场景,显著提升工作效率。本文以泛微OA Emobi

weixin_28836875的博客 389

手把手教你用西门子博图V18配置阿特拉斯PF6000拧紧枪PN通讯(附完整GSD文件与ToolsTalk配置文件)

本文详细介绍了如何使用西门子博图V18配置阿特拉斯PF6000拧紧枪的PN通讯,包括硬件连接、网络参数规划、ToolsTalk软件配置及博图工程设置。通过完整的GSD文件和配置文件,帮助工程师快速实现高精度拧紧设备与PLC的高效通讯,适用于汽车装配和电子制造等工业自动化场景。

weixin_42662293的博客 600

单链表实现简单选择排序

单链表实现简单选择排序

qq_43827597的博客 2424

YOLOv11 改进入门篇 | 从原理到代码:CBAM 注意力模块的插入与涨点验证

本文介绍了如何在YOLOv11模型中插入CBAM注意力模块以提升检测性能。CBAM包含通道和空间注意力两个子模块,通过双池化操作和MLP学习特征权重。文章详细解析了CBAM原理,提供了PyTorch实现代码,并建议在YOLOv11的Stage-3和Stage-4之间插入CBAM。实验表明,该方法在COCO数据集上使nano和small模型的mAP提升1.7-2.3个百分点,参数量仅增加0.27%,推理延迟增加0.1ms。最后给出了插入位置选择、通道缩减比等调优建议,验证了CBAM作为轻量级注意力模块的有效性

shrgegrb的博客 1301

用链表实现直接选择排序和直接插入排序

mysort()为直接插入排序,mysort2()为直接选择排序; 对于直接选择排序,我一开始是直接交换的结点里的数据,这个虽然是程序简单化了,但这和一个数组还有区别吗?所以我又改了交换结点,当然这就要烦的多了,一个有4种不同的情况~~~~~ #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; typedef struct node { ...

yuanlanjun 1537

MATLAB - 激光雷达 - 相机联合标定(Lidar-Camera Calibration)

激光雷达传感器和相机通常在自动驾驶应用中结合使用,因为激光雷达传感器收集三维空间信息,而相机则以二维图像捕捉空间的外观和纹理。您可以融合来自这些传感器的数据来改进物体检测和分类。激光雷达-相机标定可以估算出一个变换矩阵,给出两个传感器之间的相对旋转和平移。在进行激光雷达-相机数据融合时,您可以使用该矩阵。本图说明了激光雷达和相机标定 (LCC) 过程的工作流程,我们使用棋盘格作为标定对象。我们从激光雷达和相机数据中提取棋盘角和平面,然后在它们的坐标系之间建立几何关系,进行标定。

机器人控制与仿真应用 7370

数字信号处理(一):Xilinx Vivado DDS IP核设计实例(文末附源码)

前言 在数字信号处理时我们经常会用到数字变频,包数字下变频(DDC)和数字上变频(DUC),这其中会用到Xilinx公司的DDS IP核或者Altera公司的NCO IP核来产生本振频率,以现数字域信号频谱搬移。本文我们通过例化Xilinx公司的DDS IP核来产生混频器本振输入频率,并给出Modelsim仿真测试结果。 1、Xilinx DDS IP简介 Xilinx公司的DDS IP核使用AX...

FPGA_Designer 1万+

C++实现链表直接选择排序

//链表带头结点,用的额外的节点有点多,6个; void LinkedList::SelectSort(){     LinkNode *ptr = head->link;     LinkNode *pre_ptr = head;     LinkNode *q = ptr->link;     LinkNode *pre_q = ptr;  

David_2017的博客 1150

YOLO11涨点优化:创新多尺度卷积注意力(MSCA)模块,小目标检测神器!

MSCA模块通过创新的多尺度设计,在保持计算效率的同时显著提升小目标检测能力。实验证明,在YOLOv5/v8等模型上嵌入MSCA后,mAP提升超过2%,小目标检测精度提升近4%,且计算代价增加极小。注意力机制的未来发展方向动态核尺寸:根据输入特征自适应调整卷积核大小跨模态融合:结合RGB与深度/热力图等多模态信息自监督优化:利用对比学习预训练注意力模块尝试在你的YOLO模型中插入MSCA模块,欢迎在评论区分享你的涨点结果!参考文献。

QQ_778132974的博客 470

实现单链表上的选择排序java_Java创建单链表并直接选择排序输出

RT写Java也一年左右了,第一次用Java写单链表。。。废话少说,代码如下:import java.util.Scanner;public class Exp1 {public static void main(String[] args) {Node no = addNode();P(no);P(sortNode(no));}// 打印单链表static void P(Node a) {a =...

weixin_31876345的博客 364

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

嵌入式 用链表实现直接选择排序和直接插入排序示例

mysort()为直接插入排序,mysort2()为直接选择排序; 对于直接选择排序,我一开始是直接交换的结点里的数据,这个虽然是程序简单化了,但这和一个数组还有区别吗?所以我又改了交换结点,当然这就要烦的多了,一个有4种不同的情况~~~~~ [csharp] view plaincopyprint? #include #include typedef struct node { in

skdkjxy的专栏 869

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C实现单链表直接选择排序

/**************************** 单链表直接选择排序 *******************************/ #include #include struct node { int num; struct node *next; }; struct node *head=NULL; cre_list() //初始化结点 { head =

3288

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数据结构实现栈、队列、链表、直接插入排序、希尔排序、冒泡排序、选择排序

链表 LinkList.cpp #include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef int ElemType; typedef int Status; typedef struct node{ ElemType data; struct node* next;//指向下一节点的指针 ...

weixin_42542536的博客 291

c语言单向链表的排序冒泡法,用C语言实现单向链表的直接插入排序,冒泡排序和选择排序...

满意答案inbauz2014.09.16采纳率:54%等级:9已帮助:664人刚才我试了一下,样子是这样的,但具体细节上有问题,提供一个思路时间问题没有调试通过,如果你觉得不行,当我没回答#includeusing namespace std;struct node{int value;struct node *next;};struct link{struct node *head;in...

weixin_42514750的博客 276

带头结点的单链表实现快速、冒泡、直接插入/选择排序

/j指向链表中最小的结点,r指向链表的当前结点。//minp指向头结点。//如果当前结点数据就是最小值直接后移一位。//用于交换位置,设数据为整数。//遍历链表并调用上述算法(选出最小值)

Lsss123aa的博客 1219

考研数据结构(九):单链表排序(直接插入排序、冒泡排序、选择排序)

单链表的排序与顺序表的思想类似,如果对顺序表排序的思想及实现还不懂的小伙伴,戳我带你了解八大排序算法的实现。 #include <stdio.h> #include <stdlib.h> typedef struct LNode { int data; struct LNode *next; }LNode,*ListLink; // 初始化带头节点的单链表 void initListLink(ListLink &L) { L = (LNode *)mall.

潘小蓝的博客 1609

选择排序(数组、链表)

直接选择排序:直接选择排序的作法是:第一趟扫描所有数据,选择其中最小的一个与第一个数据互换;第二趟从第二个数据开始向后扫描,选择最小的与第二个数据互换;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。 那 是不是稳定的呢,我们可以观察一次扫描中,要交换最小的一个与第一个数据,最小的这个我们可以保证它依然稳定,但我们能否保证第一个数据依然不破坏稳定 呢?答案是不可以,比如 2 3 2...

weixin_30726161的博客 208

排序算法---链表排序

前言   链表排序思想和数组排序类似,区别就是数组遍历容易,数据交换也容易;链表(单项链表)只能一个方向遍历,不能逆序遍历(也可以先反转在遍历),且不能随机访问,所以排序比较麻烦,同时链表的数据交换也很麻烦,如果交换两个节点,需要共涉及3个节点,无形中增加了复杂度,也可以直接交换节点中的数据,这种方式相对简单。   如下列出了几种相对比较好简单也好理解的链表排序算法,代码如下: ...

dba175125的博客 483

常用链表排序算法

转载自:http://blog.csdn.net/northplayboy/article/details/552388    ==========================  功能:选择排序(由小到大)  返回:指向链表表头的指针 ========================== */ /*  选择排序的基本思想就是反复从还未排好序的那些节点中,  选出键值(就是

罗马非一日建成 1万+
上一篇: Linux下面time.h时间函数总结
下一篇: 停车场管理系统
zhouxf_cn
博客等级 码龄14年 54粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值