设计一个排序和查找系统。能够实现对给定的一组学生的借书证信息(如:卡号、姓名、系别、班号等)进行排序和查找。
目录
- 实验目的
- 实验题目
- 排序模板
- 实验源代码
- 实验结果
实验目的
了解各种内部排序方法,掌握Shell排序、快速排序、堆排序,归并排序的排序方法,并将其运用到实际问题中。
实验题目
设计一个排序和查找系统。能够实现对给定的一组学生的借书证信息(如:卡号、姓名、系别、班号等)进行排序和查找。
排序模板
1.快速排序
void quick_sort(Node q[], int l, int r)
{if (l >= r) return;int i = l - 1, j = r + 1, x = q[(l + r) / 2].idCard;while (i < j){do i++; while (q[i].idCard < x);do j--; while (q[j].idCard > x);if (i < j){swap(q[i], q[j]);}}quick_sort(q, l, j); quick_sort(q, j + 1, r);
}
2.归并排序
void merge_sort(Node q[],int l,int r)
{if(l>=r) return;int mid=l+r>>1;merge_sort(q,l,mid);merge_sort(q,mid+1,r);int k=l,i=l,j=mid+1;while(i<=mid&&j<=r){if(q[i].classId<q[j].classId) tmp[k++]=q[i++];else tmp[k++]=q[j++];}while(i<=mid) tmp[k++]=q[i++];while(j<=r) tmp[k++]=q[j++];for(int i=l;i<=r;i++) q[i]=tmp[i];
}
3.希尔排序
void ShellSort(Node A[],int n)
{//前后记录位置的增量 dk//增量dk 并逐步减小增量for(int dk=n/2;dk>0;dk/=2){//从第dk个元素,逐个对其所在组进行直接插入排序操作for(int i=dk;i<n;++i){int j=i;while(j-dk>=0&&A[j].series<A[j-dk].series){//插入排序交换法swap(A[j],A[j-dk]);j-=dk;}}}
}
4.堆排序
void adjust_heap(vector<int>& nums,int x,int n){int l=x*2+1;int r=x*2+2;int max=x;if(l<n&&nums[l]>nums[max])max=l;if(r<n&&nums[r]>nums[max])max=r;if(max!=x){swap(nums[max],nums[x]);adjust_heap(nums,max,n);}}void heap_sort(vector<int>& nums){int n=nums.size();for(int i=n/2-1;i>=0;i--){adjust_heap(nums,i,n);}for(int i=n-1;i>=0;i--){swap(nums[i],nums[0]);adjust_heap(nums,0,i);}}
实验源代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cmath>
using namespace std;
const int N = 10000 + 10;
int n; //学生数量
struct Node
{int idCard; //卡号string name; //姓名int classId; //班号int series; //系别
}students[N];
Node tmp[N];
void quick_sort(Node q[], int l, int r) //使用快速排序,按照卡号从小到大排序
{if (l >= r) return;int i = l - 1, j = r + 1, x = q[(l + r) / 2].idCard;while (i < j){do i++; while (q[i].idCard < x);do j--; while (q[j].idCard > x);if (i < j){swap(q[i], q[j]);}}quick_sort(q, l, j); quick_sort(q, j + 1, r);
}
void merge_sort(Node q[],int l,int r) //使用归并排序,按照班号从小到大排序
{if(l>=r) return;int mid=l+r>>1;merge_sort(q,l,mid);merge_sort(q,mid+1,r);int k=l,i=l,j=mid+1;while(i<=mid&&j<=r){if(q[i].classId<q[j].classId) tmp[k++]=q[i++];else tmp[k++]=q[j++];}while(i<=mid) tmp[k++]=q[i++];while(j<=r) tmp[k++]=q[j++];for(int i=l;i<=r;i++) q[i]=tmp[i];
}
void ShellSort(Node A[],int n) //使用希尔排序,按照系别从小到大排序
{//前后记录位置的增量 dk//增量dk 并逐步减小增量for(int dk=n/2;dk>0;dk/=2){//从第dk个元素,逐个对其所在组进行直接插入排序操作for(int i=dk;i<n;++i){int j=i;while(j-dk>=0&&A[j].series<A[j-dk].series){//插入排序交换法swap(A[j],A[j-dk]);j-=dk;}}}
}
void find_name(string name1) //根据姓名查找一个学生的信息
{int flag=0;for(int i=0;i<n;i++){if(students[i].name==name1){cout<<"姓名: "<<students[i].name<<endl;cout<<"卡号: "<<students[i].idCard<<endl;cout<<"班号: "<<students[i].classId<<endl;cout<<"系别: "<<students[i].series<<endl;flag=1;break; }}if(flag==0) cout<<"没有该学生的信息 !!!"<<endl;
}
int main()
{printf("实验题目\n");printf("设计一个排序和查找系统。能够实现对给定的一组学生的借书证信息\n");printf("(如:卡号、姓名、系别、班号等)进行排序和查找。\n"); printf("\n");printf("--------请输入学生的卡号,姓名,班号,系别-------\n");cin >> n;for (int i = 0; i < n; i++){cin>>students[i].idCard>>students[i].name>>students[i].classId>>students[i].series;}printf("--------使用归并排序对卡号从小到大排序--------\n");quick_sort(students, 0, n-1);for (int i = 0; i < n; i++){cout << students[i].idCard << ' ' << students[i].name << ' ' << students[i].classId << ' ' << students[i].series << endl;}printf("--------使用快速排序对班号从小到大排序--------\n");merge_sort(students,0,n-1);for (int i = 0; i <n; i++){cout << students[i].idCard << ' ' << students[i].name << ' ' << students[i].classId << ' ' << students[i].series << endl;}ShellSort(students,n); printf("--------使用希尔排序对系别从小到大排序--------\n");for (int i = 0; i < n; i++){cout << students[i].idCard << ' ' << students[i].name << ' ' << students[i].classId << ' ' << students[i].series << endl;}printf("请输入要查找的学生的姓名:\n");string str;while(cin>>str) {find_name(str);}return 0;
}
/*
4
688410003 lisi 190142 7
668410002 zhangsan 190143 6
668410001 wangwu 190141 5
668410004 zhangwei 190144 4
*/
实验结果
设计一个排序和查找系统。能够实现对给定的一组学生的借书证信息(如:卡号、姓名、系别、班号等)进行排序和查找。相关推荐
- 【面试题】如何设计一个高并发的系统?
每个行业都一样,人才都是分层次的,从事技术行业的程序员们更是如此,按照技术能力分为三六九等. 每个层次的人出去面试,面试官考察的方向是不一样的. 刚入职场的小白,会问你很多基础性的知识,有过几年经验的 ...
- 设计一个分步式登录系统_分布式系统:何时构建它们以及如何扩展。 分步指南。
设计一个分步式登录系统 It always strikes me how many junior developers are suffering from impostor syndrome whe ...
- 如何设计一个复杂的业务系统?从对领域设计、云原生、微服务、中台的理解开始...
欢迎关注方志朋的博客,回复"666"获面试宝典 01 如何解决复杂业务设计 Aliware 软件架构设计本身就是一个复杂的事情,但其实业界已有一个共识,那就是"通过组件化 ...
- 如何设计一个短URL地址系统
一.短URL系统的原理: 短URL系统的核心是将长的 URL 转化成短的 URL:在访问系统时,先使用短地址A访问短URL系统,由短URL系统映射到对应的长地址B,然后客户端再重定向(301或者302 ...
- 设计一个智能客服系统
背景: 最近在设计一个公司的智能客服系统,通过对现有人工客服语料作为样本,通过训练样本完成整个QA过程或业务办理过程. 整体思路 AliceBot负责闲聊,这里用了开源的语料,也可以添加语料到DB,基 ...
- 如何设计一个高性能的秒杀系统
秒杀系统要如何架构,在做技术方案时要注意哪些问题,搞了个秒杀专辑,专门收集秒杀系列文章. 当你去一家公司面试时,很多面试官都会问你如何设计一个高性能秒杀系统.秒杀涉及的技术域从客户端.浏览器.网络.负 ...
- 设计一个安全的排队系统的思考
文章目录 1.首先需要考虑高可用(HA)问题. 2.需要考虑的是负载能力. 3.需要考虑的是响应速度和流通量. 4.需要考虑的是健壮度,或者说抵抗黑客的攻击性. 在游戏中设计一个优秀而且稳定的排队系统 ...
- 设计一个小学生计算机辅助教学系统,c语言实验报告 小学生计算机辅助教学系统...
c语言实验报告 小学生计算机辅助教学系统 (11页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.90 积分 实验名称小学生计算机辅助教学系统学校学 ...
- 如何设计一个优秀的秒杀系统?
前言 如果问起秒杀系统如何设计,相信都能说出个123来,但是如果细究其中的细节点,很多人估计就无法很快的打上来了.本文从六个方面,来简要讲一下秒杀系统要如何设计,应该主要哪些事情. 01 | 设计秒杀 ...
最新文章
- json对象和json字符串转换方法
- 美团真的让人无语!背调了一个多星期,跟我说背调不通过!问原因,HR说没办法透露,但可以看其它美团机会...
- 训练、标注成本节省90%!华为云自动化AI开发平台ModelArts 3.0发布,从训练数据到模型落地一站式打通...
- Failed to get convolution algorithm.This is probably because cuDNN failed to initialize
- Spring源码深度解析第2天
- python 类和对象 经常用吗_python基础教程之对象和类的实际运用
- 从遇见到信任 | Apache Dubbo 的毕业之旅
- 一个银行客户经理的“变形记”
- 又是一个秋天~~~~
- DevOps工程师到底做些什么?
- 面试阿里前端P6血和泪换来的收获
- Servlet面试题汇总
- 小书童开源免费的二维码批量生成工具
- 【音频处理】Melodyne 音高调整 ( 打开音频文件 | 选择音高编辑工具 | 样本音高信息 | 音高自动调整 )
- 微信公众号的开发和使用注意事项有哪些?
- 2022电大国家开放大学网上形考任务-客户关系管理非免费(非答案)
- 易客多快排系统部署教程
- 计算机网络中 数据交换的方式有,计算机网络中的通信数据交换技术探讨
- C#读取excel文件时,报“外部表不是预期的格式”
- SpringSession实战项目(基于SpringBoot项目)【附源码】
热门文章
- 如何画出漂亮的深度学习模型图?
- 致远OA wpsAssistServlet 任意文件上传漏洞 漏洞复现
- 中国易切削钢行业发展趋势及投资前景分析报告(2021-2026年)
- 算法设计与分析: 4-3 磁带最优存储问题
- C#用firefox3.6下载yunfile的文件
- 每天干的啥?(2019.6)
- 购物车案例模块(全选,增减商品数量,修改商品小计,计算总计和面额,删除商品,选中商品添加背景)
- android 里面的颜色的RGB
- php语言讲座,学习PHP语言的十大诀窍
- 阿里云装mysql选择版本_mysql学习之-三种安装方式与版本介绍