一位程序员的藏书

博客提及‘更多发现’,但未给出具体内容,推测可能是在信息技术领域有新的探索与成果。

在这里插入图片描述
更多发现
在这里插入图片描述

B:图书管理员 总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 131072kB 描述 图书馆每天都会引入一些新书,每本书会带有分类编号(用大写字母A-Z表示)、书名(均为小写字母构成的字符串)、出版年月(用六位阿拉伯数字表示,如202505表示2025年5月出版)等信息。图书馆管理系统会对书目进行排序,排序规则:(1)按分类编号从A到Z排序;(2)若分类编号相同,则按书名字典序排序;(3)若分类编号和书名都相同,则按出版年月排序。 这一天,身为图书管理员的你心血来潮,调出了图书馆管理系统的后台程序,发现开发系统的程序员为了偷懒,在系统每引入一本新书时,对所有图书条目直接调用快速排序的库函数!这意味着,每引入一本新书,都要进行一次O(nlogn)的排序算法。数算课100分的你立刻就意识到,在这种情况下,插入排序无疑比快速排序更优——每引入一本新书,只需要进行一次O(n)的插入即可。由于图书馆有上万本藏书,你的这一优化直接能将排序效率提高到原来的十几倍! 输入 第一行输入一个正整数n,表示图书数量。 接下来的n行,每行包含一本书的3个信息,用空格隔开,分别为分类编号、书名、出版年月。输入数据确保不会有3个信息完全相同的两本书。 输出 程序共输出n行,每行表示当前已引入图书的排序结果。每引入一本新书,就按照排序规则将其插入到已有图书列表中,并输出当前图书的排序结果。排序结果使用图书的引入顺序编号表示(即第1本书编号为1,第2本书为2,以此类推),编号之间用空格分隔。 样例输入 5 G algorithm 202403 Q biology 202505 G education 202512 G algorithm 202504 B philosophy 202107 样例输出 1 1 2 1 3 2 4 1 3 2 5 4 1 3 2#include <stdio.h> #include <string.h> #define N 1010 struct Book { int id; char cls; char name[20]; int date; }; int cmp(struct Book x, struct Book y) { /* 填空1:比较函数 x>y返回1 x<y返回-1 x==y返回0 */ } int main() { int n; scanf("%d", &n); struct Book b[N]; for(int i = 1; i <= n; ++i) { b[i].id = i; char c = getchar(); while(c < 'A' || c > 'Z') c = getchar(); b[i].cls = c; scanf("%s %d", b[i].name, &b[i].date); if(i == 1) { printf("1\n"); continue; } struct Book temp = b[i]; for(int j = i - 1; j > 0; --j) { if( cmp(b[j], temp) > 0 ) { /*填空2:不插入,数据往后移一位(注意考虑j==1的情况)*/ } else { /*填空3:插入后break*/ } } for(int j = 1; j <= i; ++j) printf("%d ", b[j].id); printf("\n"); } return 0; }代码填空
06-18
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值