经典算法--单链表选择排序第一种:
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
}*Linklist,Node;
Linklist creat(int n)
{Linklist head,r,p;
int x,i;
head=(Node*)malloc(sizeof(Node));
r=head;
printf("输入数字:\n");
for(i=n;i>0;i--)
{scanf("%d",&x);
p=(Node*)malloc(sizeof(Node));
p->data=x;
r->next=p;
r=p;}
r->next=NULL;
return head;
} void output(Linklist head)
{Linklist p;
p=head->next;
do{
printf("%3d",p->data);p=p->next;
}while(p);
printf("\n");
} void paixu(Linklist head)
{Linklist p,q,small;int temp;
for(p=head->next;p->next!=NULL;p=p->next)
{small=p;
for(q=p->next;q;q=q->next)
if(q->data<small->data)
small=q;
if(small!=p)
{temp=p->data;
p->data=small->data;
small->data=temp;}
} printf("输出排序后的数字:\n");
output(head);
} void main()
{Linklist head;
int x,j,n;
printf("输入数字的个数(n):\n");
scanf("%d",&n);
head=creat(n);
printf("输出数字:\n");
output(head);
printf("已排序的数字:\n");
paixu(head);
}
第二种:
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
}*Linklist,Node;
Linklist creat(int n)
{Linklist head,r,p;
int x,i;
head=(Node*)malloc(sizeof(Node));
r=head;
printf("输入数字:\n");
for(i=n;i>0;i--)
{scanf("%d",&x);
p=(Node*)malloc(sizeof(Node));
p->data=x;
r->next=p;
r=p;}
r->next=NULL;
return head;
} Linklist selectsort(Node *g)
{ Node *p,*q,*t,*s,*h;
h=(Node *)malloc(sizeof(Node));
h->next=g;
p=h;
while(p->next->next!=NULL)
{
for(s=p,q=p->next;q->next!=NULL;q=q->next)
if(q->next->data<s->next->data)
s=q;
if(s!=q)
{
t=s->next;
s->next=t->next;
t->next=p->next;
p->next=t;
}
p=p->next;
}
g=h->next;
free(h);
return g;
} void output(Linklist head)
{Linklist p;
p=head->next;
do{
printf("%3d",p->data);p=p->next;
}while(p);
printf("\n");
} void main()
{Linklist head;
int x,j,n;
printf("输入数字的个数(n):\n");
scanf("%d",&n);
head=creat(n);
printf("输出数字:\n");
output(head);
head=selectsort(head);
printf("已经排序的数字:\n");
output(head);
}
///////////////////////////
Insert_Sort(Node*head)功能:单链表的插入排序
参数描述:
Node *head: 单链表的首指针
Insert_Sort(Node *head){
Node *s, //还未排序节点序列的首结点指针
*p, //链表遍历指针
*pre, //当前节点的前驱节点指针
*op; //本轮待插入节点
s = head->link;
head->link = NULL;//拆链操作,将原来的链表头节点改为s, 然后将head的后继节点置为NULL,形成两个新的链表.
while(s != NULL)
{
for(op = s,p = head;p != NULL && p->data < op->data;pre = p,p = p->link);
s = s->link;
if(p == head)
head = op;
else
pre->link =op;
op->link = p;
}
}
/////////////////////////////////////////
这里给出了一种单链表插入排序的实现。另一种类似的实现参见《C算法(第一卷:基础、数据结构、排序和搜索)(第三版)》程序3-11。
#include <stdio.h>
#include <stdlib.h>
typedef struct list LIST;
typedef LIST *link;
struct list
{
int item;
link next;
};
/*插入排序主例程*/
void InsertionSort(link h)
{
link h1,h2,h3; /*h2用来指向需要插入的结点,h3用来指向h2的前一个结点*/
for(h3=h,h2=h->next;h2!=NULL;)
{
h1=h; /*h1用来遍历寻找合适的插入位置*/
for(;h1!=h2;h1=h1->next)
{
if(h1->next->item > h2->item)/*如果找到,即把h2所指向的结点插到h1后面,然后跳出循环*/
{
h3->next=h2->next;
h2->next=h1->next;
h1->next=h2;
h2=h3->next;
break; /*别忘了此处的break*/
}
}
if(h1==h2)/*此处需要注意,只在h2所指结点不需要前插时,移动h2和h3*/
{
h2=h2->next;
h3=h3->next;
}
}
}
/*单链表插入排序的测试例程*/
int main(void)
{
/*构造一个包含头节点的单链表*/
link head = malloc(sizeof *head);
link p = head;
int i=0;
while(i<100)
{
p->next = malloc(sizeof *head);
p = p->next;
p->item = rand()%100;
printf("%d ",p->item);
p->next = NULL;
i++;
}
printf("\n");
/*插入排序*/
InsertionSort(head);
/*输出排序后的链表*/
p=head->next;
while(p!=NULL)
{
printf("%d ",p->item);
p=p->next;
}
/*释放内存*/
while(head)
{
p=head;
head=head->next;
free(p);
}
return 0;
}
分享到:
相关推荐
基于DeepSORT算法和YOLOv5 7.0版本的目标跟踪实现。DeepSORT是一种强大的多目标跟踪算法,结合YOLOv5 7.0版本的目标检测能力,可以实现高效准确的实时目标跟踪。 基于 YOLOV5 和 DeepSort 的目标追踪算法是一种结合...
SORT论文
yolov5+Deepsort算法部署于rk3588和rk3399pro开发板C++完整源码(车辆行人检测跟踪)+rknn模型+操作说明文档.zip 【资源介绍】 改善了边界框漂移, 完善了当图中没有目标等其他情形出现的bug, 增加了对cost matrix出现...
基于pytorch实现的YOLOV5+SORT的车辆行人目标识别及追踪系统源码.zip 代码完整确保可以运行,下载即用无需修改。可作为毕业设计、期末大作业和课程设计。 基于pytorch实现的YOLOV5+SORT的车辆行人目标识别及追踪...
多目标跟踪(SORT,Deep_SORT,IOU17,SST)代码,亲身测试在MOT17上运行成功,需要准备相应的数据集及标签
DEEP SORT目标跟踪算法论文
1、资源内容:基于YOLOv5+Deepsort实现车辆行人追踪和计数(完整源码+说明文档+数据).rar 2、代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 3、适用对象:计算机,电子信息工程、数学等专业...
deepsort 挺经典的一篇论文了。 这里首先下载yolov3的权重和deepsort的权重 Download deepsort parameters ckpt.t7 cd deep_sort/deep/checkpoint # download ckpt.t7 from ...cd ../../../ 提供给 外链下载过慢 或不能...
# 使用tensorrt部署yolov5和deepsort实现行人检测跟踪 ## 简介 该仓库使用 **YOLOv5** 和 **DeepSORT** 实现对象跟踪算法。同时使用 **TensorRTX** 将模型转换为引擎,并在NVIDIA Xavier上进一步部署所有代码。 *...
1、资源内容:基于Yolov5_DeepSort_Pytorch SOTA实时道路多目标跟踪和分割(完整源码+说明文档+数据).rar 2、代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 3、适用对象:计算机,电子信息...
sort 排序算法大全sort 排序算法大全sort 排序算法大全sort 排序算法大全sort 排序算法大全sort 排序算法大全sort 排序算法大全
《计算机毕业设计:基于YOLOv8-DeepSORT实现的智能车辆目标检测系统》是一项结合深度学习技术和计算机视觉算法的综合性计算机毕业设计项目。该项目旨在利用先进的YOLOv8目标检测算法和DeepSORT多目标跟踪算法,实现...
cobol对file文件操作,using,giving,input procedure,output procedure用法,SORT
通过merge-sort算法的实现,掌握外存算法所基于的I/O模型与内存算法基于的RAM模型的区别;理解不同的磁盘访问优化方法是如何提高数据访问性能的。
根据Deep SORT的代码进行算法流程分析,通过列举了前4 帧的跟踪流程,对每一帧各种结果的可能性进行了分析,便于研究多目标跟踪方向的道友们更好的理解代码流程。本人也是初学者,若有解释不到位或者借鉴不当之处,...
JAVA SortList 通用排序类 从网上搜到一个java 对 List 排序的工具,自己改了下 支持 整数 和 浮点数 比较后排序,浮点数小数部分的有点问题,期待大牛帮忙优化。
基于yolov5+lpr3+deepsort+pyqt5的交通识别检测系统源码(车辆行人检测、车牌识别、车型识别、车速识别、带GUI).zip 【包含如下功能】 带GUI界面,deepsort目标跟踪、车辆行人检测及计数、车速识别、多种车型识别等 ...
根据github上的项目完成的使用YOLOv3+SORT实现车辆统计,包含完整注释,使用方法请见Readme
C++实现opencv+yolo+tensorflow+deepsort检测,网上都是python的,用c++重写的,库全部配置好,需要cuda9.0,cudnn7,tensorflow使用的1.12.0gpu,已在工程中配置好。下载即用。文件太大,已记录百度云链接,资源有...