数据结构实验——排序算法的实现与分析

前言

到目前为止,8个数据结构实验在这里就全部更完啦(撒花)!我那一段难忘的周二晚课时光也告一段落,整体来说,有赶课的折腾,有调错的崩溃,也有故意迟到五分钟的惬意,用GPT生成我想要的东西的爽快......

当然也有折磨的实验总评86分呜呜呜,不过遗憾也都是过去了,接下来我要学的是计网实验、计组实验、数据库实验、密码实验......3G大学我谢谢你,有缘有时间再更。

那就希望我的博客能帮到你吧,不是那种应付式的帮,是能借我的讲解让看客更懂一些,哪怕一些。如果真要找,还不如直接去找那些阅读量1w+的文章,那些大佬讲原理比我清楚。

实验实习过程步骤(注意是主要关键步骤,不是所有步骤,适当文字+截图说明)

排序算法是一个再熟悉不过的领域,选择排序、冒泡排序、插入排序、快速排序、桶排序等等。大一C语言第八章就讲过选择排序,尤其是对于这种成绩排序的题目,我实在不想手搓快速排序,太杀鸡用牛刀了,为了避免老师怀疑我在水题解,咳咳先放一张图,我真的只是懒,不是不会写哈哈哈。

选择排序的算法如下,实际上就是找谁后面的数字谁比当前的数字更大,然后往前放。复杂度为O(n^2)。代码给大一小朋友都会写,但是实际上我出了很多问题。

图来源:【排序算法】快速排序(C语言)_c语言快速排序-CSDN博客

主要是很多细节问题,零碎的细节不讲了,讲两个重要的细节:

第一个细节是我想用len全局变量一把梭,当成n这样一个位置,这个没问题,但是咱们题目是while循环直到输入0 0截止,所以n是需要自己算的。我一开始是len--,但实际上要是len-=2,问题出在len最后指的地方是在0 0后面,但是我要找到0 0前面的位置,那差值应该是2。

第二个细节是我写了个p[i].score<p[j].score,i是定点,我们要找的是后面的最大点,所以需要不断迭代更新最大值点位,否则这样排序还是乱序,再一个如果是ij比较,那你设置k是来干嘛的。

只能说学海无涯,需要时时温故而知新,真别觉得自己多厉害,不去写别的排序方法是会忘记的,这个排序我都纠错纠正了很久。

其实排序完这题真正的关键点还没说完,就是这个成绩排名到底怎么去记录,因为有同分的。我的思路是dp,可能我对dp理解还不够深入,我的意思就是一条线走到底不需要回头。复杂度就是0(n)。怎么做呢,初始化num是排名,让后面的数跟前面的数比较,如果不等,那么num++,然后把每个num都赋值到对应的人上面。(我觉等更难的是1 2 2 4 4 4 7这种,还更难改,而这个才是我们考试真正采用的排名方法。)

至此,这题就做完啦!排序你怎么这么博大精深,真的折腾。

实验实习结果及分析

符合题意,而且也符合大多数排名情况。

实验遇到的问题及解决办法,实验心得体会及对此实验的意见或建议(有就写,无可不写)

如上,学海无涯,需要时时温故而知新,真别觉得自己多厉害,不去写别的排序方法是会忘记的,这个排序我都纠错纠正了很久。排序你怎么这么博大精深,真的折腾。

搬运工有话说

我在这里防抄袭设置的两个错误,就是我上面说的对应的两个点,自己找吧。

Code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct student{ //学生信息定义
	char name[8]; //学生姓名
	double score; //学生成绩
}STUDENT;

STUDENT p[20];
int rank[20];
int len=1;

void input();
void Mysort();
void ranking();
void output();

int main()
{
	input();
	Mysort();
	ranking();
	output();
	return 0;
}

void input()
{
	do
	{
		scanf("%s %lf",p[len].name,&p[len].score);
		getchar();
		len++;
	}while(p[len-1].score!=0);
	len-=1;//0 0在假想len的上一层,而输入0 0,len还往上走了一层,因此减2 
}
void Mysort()
{
	int i,j,k;
	double t;
	char temp[10];
	for(i=1;i<=len-1;i++){
		k=i;
		for(j=i+1;j<=len;j++){
			if(p[i].score<p[j].score)//
			{
				k=j;
			}		
		}
		
		if(k!=i){
			t=p[k].score;
			p[k].score=p[i].score;
			p[i].score=t;
			
			strcpy(temp,p[k].name);
			strcpy(p[k].name,p[i].name);
			strcpy(p[i].name,temp);
		}
	}
	return ;
}
void ranking()
{
	int num=1;
	rank[1]=num;
	for(int i=2;i<=len;i++){
		if(p[i].score!=p[i-1].score){
			num++;//名次 
		}
		rank[i]=num;
	}
}
void output()
{
	for(int i=1;i<=len;i++)	{
		printf("%d %s %.2lf\n",rank[i],p[i].name,p[i].score);
	}
}

测试点:
张三 80.00
李四 96.00
王五 90.00
郑六 78.00
田七 85.00
李明 90.00
0 0

完结 完结 完结 ✿✿ヽ(°▽°)ノ✿撒花 撒花 撒花✿✿ヽ(°▽°)ノ✿

感谢愿意看到底的你们!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/968413.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Antv G2 5.x】饼图添加点击事件,获取当前坐标数据

// 监听 tooltip:show 事件this.chart.on(tooltip:show, (event) => {this.currentShowTooltipName = event.data.items[0].name})// 监听绘图区plot的点击事件this.chart.on(interval:click, ev => {this.$emit(chartClick, this.currentShowTooltipName);})// 监听绘图…

Oracle常用导元数据方法

1 说明 前两天领导发邮件要求导出O库一批表和索引的ddl语句做国产化测试&#xff0c;涉及6个系统&#xff0c;6千多张表&#xff0c;还好涉及的用户并不多&#xff0c;要不然很麻烦。 如此大费周折原因&#xff0c;是某国产库无法做元数据迁移。。。额&#xff0c;只能我手动导…

anolis os 8.9安装jenkins

一、系统版本 # cat /etc/anolis-release Anolis OS release 8.9 二、安装 # dnf install -y epel-release # wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo # rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.…

Python办公自动化之PDF

python版本&#xff1a;3.13.1 开发工具&#xff1a;pycharm 安装三方库&#xff1a;pypdf2 、pdfplumber、pymupdf 一、从PDF中提取文字 用Python从PDF中提取文字-CSDN博客 二、从PDF中提取表格 用Python从PDF中提取表格-CSDN博客 三、拆分和合并PDF文件 用Python拆…

变化检测相关论文可读list

一些用得上的&#xff1a; 遥感变化检测常见数据集https://github.com/rsdler/Remote-Sensing-Change-Detection-Dataset/ 代码解读&#xff1a;代码解读 | 极简代码遥感语义分割&#xff0c;结合GDAL从零实现&#xff0c;以U-Net和建筑物提取为例 NeurIPS2024: https://mp.w…

ASP.NET Core SignalR案例:导入英汉词典

Ecdict 下载词典文件stardict.7z&#xff0c;解压&#xff0c;stardict.csv是一个CSV格式的文本文件&#xff0c;文件的第一行是表头&#xff0c;除第一行外&#xff0c;其他每行文本是一个单词的相关信息&#xff0c;用逗号分隔的就是各个列的值。英汉词典ECDICT中导入单词到…

元宵佳节,我的创作纪念日:技术之路的回顾与展望

今天是元宵节&#xff0c;一个象征着团圆与美好的节日。巧合的是&#xff0c;今天也是我作为技术博客博主的创作纪念日。在这个特别的日子里&#xff0c;我想和大家分享我的创作故事&#xff0c;回顾初心、总结收获、展望未来&#xff0c;同时也希望能为正在技术道路上探索的你…

python实现常见数学概率分布

常见正态分布 1.贝塔分布1.1 概率密度函数1.2参数对分布形状的影响1.3 应用场景1.4 python实现 2. 帕累托分布&#xff08;80/20法则&#xff09;3. 正态分布&#xff08;高斯分布&#xff09;3.1 正态分布对应性质3.2 正态分布对应图像![在这里插入图片描述](https://i-blog.c…

本地生活案例列表案例

1.实现导航跳转 2.设置标题内容并创建编译模式 3.获取并且渲染商铺列表数据 获取数据 渲染页面 4.实现初步上拉加载效果 4.1配置loading效果 4.3配置上拉触底距离&#xff0c;并且使页码值自增加1&#xff0c;获取更多数据 节流处理 5.判断数据是否加载完毕 当没有后续数据了…

.NET版Word处理控件Aspose.Words教程:使用 C# 删除 Word 中的空白页

Word 文档中的空白页会使其看起来不专业并扰乱流程。用户会遇到需要删除 Word 中的空白页的情况&#xff0c;但手动删除它们需要时间和精力。在这篇博文中&#xff0c;我们将探讨如何使用 C# 删除 Word 中的空白页。 本文涵盖以下主题&#xff1a; C# 库用于删除 Word 中的空…

Unity崩溃后信息结合符号表来查看问题

目录 SO文件符号表对调试和分析的重要性调试方面分析方面 错误数据安装Logcat解释符号表设置符号文件路径生成解析 相关参考 SO文件 so 文件&#xff08;Shared Object File&#xff0c;共享目标文件&#xff09;和符号表紧密相关&#xff0c;它们在程序的运行、调试和分析过程…

mapbox进阶,添加绘图扩展插件,裁剪线

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️MapboxDraw 绘图控件二、🍀添加绘图扩…

DeepSeek:从入门到精通

在人工智能飞速发展的今天&#xff0c;DeepSeek作为一款备受瞩目的AI工具&#xff0c;正以其强大的功能和开源理念改变着我们的生活和工作方式。本文将带你深入了解DeepSeek&#xff0c;从基础入门到进阶应用&#xff0c;助你快速掌握这一前沿工具。 文末有详细资料可下载 文末…

【清晰教程】通过Docker为本地DeepSeek-r1部署WebUI界面

【清晰教程】本地部署DeepSeek-r1模型-CSDN博客 目录 安装Docker 配置&检查 Open WebUI 部署Open WebUI 安装Docker 完成本地DeepSeek-r1的部署后【清晰教程】本地部署DeepSeek-r1模型-CSDN博客&#xff0c;通过Docker为本地DeepSeek-r1部署WebUI界面。 访问Docker官…

八、OSG学习笔记-

前一章节&#xff1a; 七、OSG学习笔记-碰撞检测-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145558132?spm1001.2014.3001.5501 一、了解OSG图元加载显示流程 本章节代码&#xff1a; OsgStudy/wids CuiQingCheng/OsgStudy - 码云 - 开源中国https:…

[笔记] 汇编杂记(持续更新)

文章目录 前言举例解释函数的序言函数的调用栈数据的传递 总结 前言 举例解释 // Type your code here, or load an example. int square(int num) {return num * num; }int sub(int num1, int num2) {return num1 - num2; }int add(int num1, int num2) {return num1 num2;…

在 Mac ARM 架构上使用 nvm 安装 Node.js 版本 16.20.2

文章目录 1. 安装 nvm&#xff08;如果还没有安装的话&#xff09;2. 加载 nvm 配置3. 列出特定系列的 Node.js 版本&#xff08;远程&#xff09;&#xff1a;4. 安装 Node.js 16.20.25. 使用指定版本的 Node.js6. 验证安装 在 Mac ARM 架构上使用 nvm 安装 Node.js 版本 16.…

物联网水质监测系统设计与实现/基于STM32的水产养殖云监控系统设计

背景 随着物联网技术的飞速发展&#xff0c;各行各业都在逐步实现智能化管理&#xff0c;水质监测系统作为环境监测中的一个重要环节&#xff0c;近年来备受关注。如何高效、精准地监测水质&#xff0c;尤其是在远程无法到达的地方&#xff0c;成为了一个迫切需要解决的问题。…

SAP Smartforms 货币和数量字段设置参考及格式,消息号是SSFCOMPOSER601

SAP Smartforms 货币和数量字段设置参考及格式&#xff0c;消息号是SSFCOMPOSER601 在开发SAP Smartforms 时&#xff0c;会遇到设置打印的货币字段或数量字段在打印预览时无法显示报错&#xff08;消息号是SSFCOMPOSER601&#xff0c;提示参考字段IS_DATA-GESME在表格中未知&…

Hbuildx开发的小程序,运行到微信开发者工具后,显示空白报错Pages not been registered yet,解决方法

问题描述&#xff1a; Hbuildx开发的小程序&#xff0c;运行到 微信开发者工具后&#xff0c;显示空白 报错Pages not been registered yet 解决方法&#xff1a; 1.检查报错的这个pages页面 &#xff0c;实际是否存在。 2.路由文件中是否定义了该pages页面。 3.路由文件中…