经典算法--单链表选择排序第一种:
#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;
}
分享到:
相关推荐
标题中的"sort_nat.zip_sort nat_sort_nat"可能是指一个用于整理文件名的程序或脚本,它采用了自然排序(Natural Sort)的方式,使得文件名按照人类阅读习惯进行排序。自然排序不仅考虑字符的顺序,还能理解数字序列...
SORT(Simple Online and Realtime Tracking)算法是一种针对多目标跟踪(Multiple Object Tracking,MOT)问题的高效实时方法。该算法由Alex Bewley等人在2017年发表的论文中提出,其主要关注在线实时应用中的目标...
本资源包含了四种常见的多目标跟踪算法的实现:SORT (Simple Online and Realtime Tracking),Deep SORT,IOU Tracker以及SST (Spatio-temporal Salient Target Detection and Tracking)。 1. **SORT (Simple On...
基于DeepSORT算法和YOLOv5 7.0版本的目标跟踪实现。DeepSORT是一种强大的多目标跟踪算法,结合YOLOv5 7.0版本的目标检测能力,可以实现高效准确的实时目标跟踪。 基于 YOLOV5 和 DeepSort 的目标追踪算法是一种结合...
# YOLOv10_DeepSORT This repository contains code for object detection and tracking in videos using the YOLOv10 object detection model and the DeepSORT algorithm. ## Installation 1. Clone this ...
"SORT"是COBOL中一个强大的工具,用于对文件进行排序。本文将深入探讨COBOL中的FILE操作,以及如何利用USING,GIVING,INPUT PROCEDURE和OUTPUT PROCEDURE指令进行文件操作,特别是与SORT相关的知识点。 首先,让...
基于DeepSORT算法和YOLOv5 7.0版本的目标跟踪实现。DeepSORT是一种强大的多目标跟踪算法,结合YOLOv5 7.0版本的目标检测能力,可以实现高效准确的实时目标跟踪。 基于 YOLOV5 和 DeepSort 的目标追踪算法是一种结合...
《深度学习目标追踪技术:基于Deep-Sort与PyTorch的YOLOv3实现详解》 在计算机视觉领域,目标追踪是一项重要的任务,它能够帮助系统持续关注在视频或序列图像中的特定对象。Deep-Sort是一种高效且准确的目标追踪...
YOLOv5-DeepSORT飞鸟视觉检测和跟踪是一个基于深度学习的复合系统,用于实时地在视频或图像序列中定位并追踪鸟类。这个项目融合了两种强大的技术:YOLOv5(You Only Look Once)作为目标检测器,以及DeepSORT(Deep ...
YOLOv5与DeepSORT是两个在计算机视觉领域广泛应用的算法。YOLO(You Only Look Once)是一种实时目标检测系统,而DeepSORT则是一个多目标跟踪框架。它们结合使用,可以实现对视频中目标的精确检测和连续追踪。 ...
本项目以YOLOv10和DeepSORT两种技术为核心,实现了对视频中移动目标的有效跟踪,提供了详细的源码和教程,是学习和实践这一技术的良好资源。 首先,YOLO(You Only Look Once)是一种实时的目标检测系统,其设计...
使用YOLOv9+DeepSort实现的目标跟踪算法python源码.zip使用YOLOv9+DeepSort实现的目标跟踪算法python源码.zip使用YOLOv9+DeepSort实现的目标跟踪算法python源码.zip使用YOLOv9+DeepSort实现的目标跟踪算法python源码...
为了解决这些问题,可以借助跟踪器 DeepSORT 以及检测器 YOLO v8,从而构建一个高性能的实时多目标跟踪模型。 参考博客:https://blog.csdn.net/matt45m/article/details/134237238#comments_32297294
在本文中,我们将深入探讨如何使用一系列先进的计算机视觉技术,包括YOLOv5目标检测、DeepSORT追踪算法、Bytetrack以及IoU计算,来实现高效的人车流统计。这些技术在现代智能监控和交通管理系统中发挥着关键作用。 ...
在本文中,我们将深入探讨"DeepSORT-YOLOv5猫狗检测和跟踪+可视化目标运动轨迹"这一技术主题。这个项目结合了两种强大的计算机视觉技术:YOLOv5(You Only Look Once的第五版)对象检测算法和DeepSORT目标跟踪算法,...
当我们需要对List中的元素进行排序时,`Collections.sort()`方法就派上了用场。这个方法能够根据元素的自然顺序或者自定义的比较器进行排序。本文将深入探讨`Collections.sort()`的使用、原理以及如何自定义排序规则...
标题中的"two-phase-merge_sort-.rar_2phase merge sort_merge_sort_two merge"指的是一个采用两阶段归并排序算法的程序或文档集合。这个算法是针对大数据量、无法一次性加载到内存中的情况设计的,常见于外部排序...
在C语言中,`sort`通常指的是排序算法的实现,特别是在C++标准库中,`std::sort`是一个常用的排序函数。然而,在纯C环境中,没有内置的`sort`函数,程序员需要自己实现排序算法。这里我们将探讨C语言中实现排序的...