2-1有序的结构体数组

/*  
* 程序的版权和版本声明部分  
* Copyright (c)2012, 烟台大学计算机学院学生  
* All rightsreserved.  
* 文件名称: fun.cpp  
* 作 者:王心垚  
* 完成日期:2013 年3月 8日  
* 版本号: v1.0  
* 对任务及求解方法的描述部分:建立和输出一个简单的链表 
* 输入描述:略  
* 问题描述:略  
* 程序输出:如下  
*/   



using namespace std;  
struct Score{  
    char num[14];  
    int cpp;  
    int math;  
    int english;  
};  
void sort1(Score [],int );  
void sort2(Score [],int );  
void output(Score [],int );  
int main(){  
    Score score[]={{"201152501104",65,69,68},  
    {"201152501114",94,89,63},  
    {"201152501138",67,62,84},  
    {"201152501204",100,65,91},  
    {"201152501202",59,80,55},  
    {"201152501115",92,84,60},  
    {"201152501201",80,92,71},  
    {"201152501145",88,56,67},  
    {"201152501203",62,62,95},  
    {"201152501140",80,60,86},  
    {"201152501205",73,90,94},  
    };  
    int stuNum=sizeof(score)/sizeof(score[0]);  
    //将所有同学按学号升序排序后输出   
    sort2(score,stuNum);  
    cout<<"按学号升序后排列为:"<<endl;  
    output(score,stuNum);  
    sort1(score,stuNum);  
    cout<<"按C++降序排列后:"<<endl;  
    output(score,stuNum);  
    return 0;  
} 


 
void sort1(Score score[],int stuNum){  
    struct Score a[1];  
    int i,j;  
    for(i=0;i<stuNum;i++)  
    {          for(j=0;j<stuNum-1;j++)  
           if(score[j].cpp<score[j+1].cpp)  
            {  
                a[0]=score[j];  
                score[j]=score[j+1];  
                score[j+1]=a[0];  
            }  
    }  
    return ;  
}  
void sort2(Score score[],int stuNum){  
    struct Score a[1];  
    int i,j;  
    for(i=0;i<stuNum;i++)  
    {  
        for(j=0;j<stuNum-1;j++)  
            if(strcmp(score[j].num,score[j+1].num)>0)  
            {  
                a[0]=score[j];  
                score[j]=score[j+1];                  score[j+1]=a[0];  
            }  
    }  
    return ;  
}  
void output(Score score[],int stuNum)  
{  
    int i;  


运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
### 回答1: 可以使用冒泡排序或快速排序等算法对结构体数组进行排序,具体实现方法如下: 1. 冒泡排序 冒泡排序是一种简单的排序算法,它的基本思想是通过不断交换相邻的元素,将最大的元素逐步“冒泡”到数组的末尾。对于结构体数组,可以按照成绩高低的顺序进行排序,具体实现代码如下: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct student { char name[20]; int score; } Student; void bubble_sort(Student arr[], int n) { int i, j; Student tmp; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (arr[j].score < arr[j + 1].score) { tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } } } int main() { Student arr[5] = { {"Tom", 80}, {"Jerry", 90}, {"Alice", 70}, {"Bob", 85}, {"David", 75} }; int n = sizeof(arr) / sizeof(arr[0]); bubble_sort(arr, n); int i; for (i = 0; i < n; i++) { printf("%s %d\n", arr[i].name, arr[i].score); } return 0; } ``` 2. 快速排序 快速排序是一种高效的排序算法,它的基本思想是通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有元素都比另一部分的所有元素小,然后再按照同样的方法对这两部分数据分别进行快速排序,直到整个序列有序为止。对于结构体数组,可以按照成绩高低的顺序进行排序,具体实现代码如下: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct student { char name[20]; int score; } Student; int partition(Student arr[], int left, int right) { int i = left, j = right; Student tmp = arr[left]; while (i < j) { while (i < j && arr[j].score <= tmp.score) { j--; } if (i < j) { arr[i++] = arr[j]; } while (i < j && arr[i].score >= tmp.score) { i++; } if (i < j) { arr[j--] = arr[i]; } } arr[i] = tmp; return i; } void quick_sort(Student arr[], int left, int right) { if (left < right) { int pivot = partition(arr, left, right); quick_sort(arr, left, pivot - 1); quick_sort(arr, pivot + 1, right); } } int main() { Student arr[5] = { {"Tom", 80}, {"Jerry", 90}, {"Alice", 70}, {"Bob", 85}, {"David", 75} }; int n = sizeof(arr) / sizeof(arr[0]); quick_sort(arr, 0, n - 1); int i; for (i = 0; i < n; i++) { printf("%s %d\n", arr[i].name, arr[i].score); } return 0; } ``` ### 回答2: 结构体数组是将结构体类型的元素保存在数组中,方便对这些元素进行处理和操作。对于学生记录这样的结构体,我们可以根据不同的需求对其进行排序。本题需要将学生记录按照成绩高低进行排序,因此我们可以使用快速排序来解决问题。 快速排序的基本思想是选择一个基准数,将小于等于基准数的元素放到基准数左边,将大于基准数的元素放到基准数右边,然后分别对左右两边的元素进行递归排序。在本题中,我们可以将学生成绩作为基准数,将小于等于基准数的记录放到左边,将大于基准数的记录放到右边。 接下来是具体的实现步骤: 1. 定义一个学生记录的结构体,包括学生姓名和成绩两个字段。 2. 定义一个结构体数组,将多个学生记录保存到数组中。 3. 编写一个快速排序函数,实现根据成绩从大到小对学生记录进行排序。函数的参数包括一个结构体数组、左边界和右边界。 4. 在快速排序函数中实现分治算法,将小于等于基准数的记录放到左边,将大于基准数的记录放到右边,然后递归对左右两边的记录进行排序。 5. 在函数外部调用快速排序函数,对学生记录进行排序。 6. 输出排序后的学生记录。 下面是对应的代码实现: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> // 定义学生记录结构体 typedef struct student { char name[20]; int score; } Student; // 定义快速排序函数 void quickSort(Student *arr, int left, int right) { int i, j; Student pivot, temp; if (left < right) { // 初始化基准数和左右指针 pivot = arr[left]; i = left; j = right; while (i < j) { // 从后往前找到第一个比基准数小的记录 while (i < j && arr[j].score <= pivot.score) j--; if (i < j) { temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } // 从前往后找到第一个比基准数大的记录 while (i < j && arr[i].score >= pivot.score) i++; if (i < j) { temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } // 将基准数放到正确的位置 arr[left] = arr[i]; arr[i] = pivot; // 递归排序左右两边的记录 quickSort(arr, left, i - 1); quickSort(arr, i + 1, right); } } int main(void) { int n, i; Student *arr; printf("请输入学生人数:"); scanf("%d", &n); // 动态分配结构体数组内存空间 arr = (Student *)malloc(sizeof(Student) * n); if (arr == NULL) { printf("内存分配失败!\n"); return -1; } // 输入学生记录 printf("请依次输入学生姓名和成绩:\n"); for (i = 0; i < n; i++) { scanf("%s%d", arr[i].name, &arr[i].score); } // 对学生记录进行排序 quickSort(arr, 0, n - 1); // 输出排序后的学生记录 printf("\n按成绩从高到低排序后的学生记录如下:\n"); printf("姓名\t成绩\n"); for (i = 0; i < n; i++) { printf("%s\t%d\n", arr[i].name, arr[i].score); } // 释放内存空间 free(arr); return 0; } ``` ### 回答3: 要根据成绩高低将学生记录排序,我们可以使用结构体数组排序。结构体数组排序的一般思路是:先定义一个结构体数组,然后使用排序算法对其进行排序,最后输出排序后的结果。 具体实现过程分为以下几个步骤: 1. 定义结构体数组 结构体数组是由多个结构体元素组成的复合数据类型,每个元素包含多个字段。在本例中,结构体元素是学生记录,每个学生记录包含姓名和成绩两个字段,因此定义结构体如下: struct Student{ char name[20]; int score; }stu[5]; //定义了一个由5个学生记录组成的结构体数组 2.输入学生记录 在程序中输入5位学生的姓名和成绩。输入可以采用循环结构,逐个输入学生记录。 for(int i=0;i<5;i++){ printf("请输入第%d个学生的姓名和成绩:",i+1); scanf("%s%d",stu[i].name,&stu[i].score); } 3.排序算法 对学生记录进行排序,可以使用冒泡排序、快速排序、选择排序等多种排序算法。在本例中,我们使用冒泡排序对学生记录按照成绩从高到低排序,先对成绩进行比较,再交换对应的姓名。 void bubbleSort(struct Student *stu,int n){ for(int i=0;i<n-1;i++){ for(int j=0;j<n-i-1;j++){ if(stu[j].score<stu[j+1].score){ struct Student temp; temp=stu[j]; stu[j]=stu[j+1]; stu[j+1]=temp; } } } } 4.输出排序结果 最后,要输出按照成绩从高到低排序后的学生记录。可以使用循环结构遍历结构体数组。 for(int i=0;i<5;i++){ printf("第%d名学生:%s %d\n",i+1,stu[i].name,stu[i].score); } 这样,就可以实现根据成绩高低将学生记录排序的功能了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值