`
jackey25
  • 浏览: 111379 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

sort

阅读更多
经典算法--单链表选择排序第一种:
#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

    标题中的"sort_nat.zip_sort nat_sort_nat"可能是指一个用于整理文件名的程序或脚本,它采用了自然排序(Natural Sort)的方式,使得文件名按照人类阅读习惯进行排序。自然排序不仅考虑字符的顺序,还能理解数字序列...

    SORT目标跟踪算法论文

    SORT(Simple Online and Realtime Tracking)算法是一种针对多目标跟踪(Multiple Object Tracking,MOT)问题的高效实时方法。该算法由Alex Bewley等人在2017年发表的论文中提出,其主要关注在线实时应用中的目标...

    多目标跟踪(SORT,Deep_SORT,IOU17,SST)代码

    本资源包含了四种常见的多目标跟踪算法的实现:SORT (Simple Online and Realtime Tracking),Deep SORT,IOU Tracker以及SST (Spatio-temporal Salient Target Detection and Tracking)。 1. **SORT (Simple On...

    基于YOLOV5-7.0+DeepSort的目标追踪算法

    基于DeepSORT算法和YOLOv5 7.0版本的目标跟踪实现。DeepSORT是一种强大的多目标跟踪算法,结合YOLOv5 7.0版本的目标检测能力,可以实现高效准确的实时目标跟踪。 基于 YOLOV5 和 DeepSort 的目标追踪算法是一种结合...

    YOLOv10-DeepSORT-main

    # 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 ...

    cobol对file文件操作SORT

    "SORT"是COBOL中一个强大的工具,用于对文件进行排序。本文将深入探讨COBOL中的FILE操作,以及如何利用USING,GIVING,INPUT PROCEDURE和OUTPUT PROCEDURE指令进行文件操作,特别是与SORT相关的知识点。 首先,让...

    基于YOLOV5-7.0+DeepSort的目标追踪算法测

    基于DeepSORT算法和YOLOv5 7.0版本的目标跟踪实现。DeepSORT是一种强大的多目标跟踪算法,结合YOLOv5 7.0版本的目标检测能力,可以实现高效准确的实时目标跟踪。 基于 YOLOV5 和 DeepSort 的目标追踪算法是一种结合...

    deep-sort-pytorch-master-yolov3配置好的代码

    《深度学习目标追踪技术:基于Deep-Sort与PyTorch的YOLOv3实现详解》 在计算机视觉领域,目标追踪是一项重要的任务,它能够帮助系统持续关注在视频或序列图像中的特定对象。Deep-Sort是一种高效且准确的目标追踪...

    YOLOv5-Deepsort飞鸟视觉检测和跟踪

    YOLOv5-DeepSORT飞鸟视觉检测和跟踪是一个基于深度学习的复合系统,用于实时地在视频或图像序列中定位并追踪鸟类。这个项目融合了两种强大的技术:YOLOv5(You Only Look Once)作为目标检测器,以及DeepSORT(Deep ...

    yolov5-deepsort成功运行

    YOLOv5与DeepSORT是两个在计算机视觉领域广泛应用的算法。YOLO(You Only Look Once)是一种实时目标检测系统,而DeepSORT则是一个多目标跟踪框架。它们结合使用,可以实现对视频中目标的精确检测和连续追踪。 ...

    移动跟踪-基于YOLOv10+DeepSort实现视频中移动目标跟踪算法-附项目源码+流程教程-优质项目实战.zip

    本项目以YOLOv10和DeepSORT两种技术为核心,实现了对视频中移动目标的有效跟踪,提供了详细的源码和教程,是学习和实践这一技术的良好资源。 首先,YOLO(You Only Look Once)是一种实时的目标检测系统,其设计...

    使用YOLOv9+DeepSort实现的目标跟踪算法python源码.zip

    使用YOLOv9+DeepSort实现的目标跟踪算法python源码.zip使用YOLOv9+DeepSort实现的目标跟踪算法python源码.zip使用YOLOv9+DeepSort实现的目标跟踪算法python源码.zip使用YOLOv9+DeepSort实现的目标跟踪算法python源码...

    YOLOv8与DeepSORT实现目标追踪

    为了解决这些问题,可以借助跟踪器 DeepSORT 以及检测器 YOLO v8,从而构建一个高性能的实时多目标跟踪模型。 参考博客:https://blog.csdn.net/matt45m/article/details/134237238#comments_32297294

    yolov5+deepsort+bytertrack+iou 人车流统计

    在本文中,我们将深入探讨如何使用一系列先进的计算机视觉技术,包括YOLOv5目标检测、DeepSORT追踪算法、Bytetrack以及IoU计算,来实现高效的人车流统计。这些技术在现代智能监控和交通管理系统中发挥着关键作用。 ...

    DeepSORT-YOLOv5猫狗检测和跟踪+可视化目标运动轨迹

    在本文中,我们将深入探讨"DeepSORT-YOLOv5猫狗检测和跟踪+可视化目标运动轨迹"这一技术主题。这个项目结合了两种强大的计算机视觉技术:YOLOv5(You Only Look Once的第五版)对象检测算法和DeepSORT目标跟踪算法,...

    java List 排序 Collections.sort

    当我们需要对List中的元素进行排序时,`Collections.sort()`方法就派上了用场。这个方法能够根据元素的自然顺序或者自定义的比较器进行排序。本文将深入探讨`Collections.sort()`的使用、原理以及如何自定义排序规则...

    two-phase-merge_sort-.rar_2phase merge sort_merge_sort_two merge

    标题中的"two-phase-merge_sort-.rar_2phase merge sort_merge_sort_two merge"指的是一个采用两阶段归并排序算法的程序或文档集合。这个算法是针对大数据量、无法一次性加载到内存中的情况设计的,常见于外部排序...

    C语言中的sort

    在C语言中,`sort`通常指的是排序算法的实现,特别是在C++标准库中,`std::sort`是一个常用的排序函数。然而,在纯C环境中,没有内置的`sort`函数,程序员需要自己实现排序算法。这里我们将探讨C语言中实现排序的...

Global site tag (gtag.js) - Google Analytics