快速排序、二分查找 学生信息(可进行姓名查找)
来源:互联网 发布:淘宝怎么刷信用卡套现 编辑:程序博客网 时间:2024/06/06 05:41
代码:
#include<stdio.h>#include<stdlib.h>#define m 3struct student{ long cardnum;; char name[20]; char academy[20]; long class_num;};void input(struct student stu[m]){ int j,i=1; for(j=0;j<m;j++) { printf("请输入第%d个同学的卡号:",i); scanf("%ld",&stu[j].cardnum); printf("请输入第%d个同学的姓名:",i); scanf("%s",stu[j].name); printf("请输入第%d个同学的院系:",i); scanf("%s",stu[j].academy); printf("请输入第%d个同学的班级:",i); scanf("%ld",&stu[j].class_num); i++; printf("--------------------------\n"); }}void quicksort(struct student stu[m],int left,int right){ int i,j; struct student p; if(left<right) { i=left+1; j=right; while(i<j) { if(stu[i].cardnum > stu[left].cardnum) { p=stu[i]; stu[i]=stu[left]; stu[left]=p; j--; } else { i++; } } if(stu[i].cardnum >= stu[left].cardnum) { i--; } p=stu[left]; stu[left]=stu[i]; stu[i]=p; quicksort(stu,left,i); quicksort(stu,j,right); }}void sort(struct student stu[m]){ int i,j; struct student p; for(i=0;i<m;i++) { for(j=i+1;j<m;j++) { if(strcmp(stu[i].name,stu[j].name)>0) { p=stu[i]; stu[i]=stu[j]; stu[j]=p; } } }}int twice_find(struct student stu[m],int key){ int low,high=m-1,mid; while(low<=high) { mid=(low+high)/2; if(stu[mid].cardnum == key) return mid; if(stu[mid].cardnum>key) high=mid-1; else low=mid+1; } return -1;}void display(struct student stu[m]){ int i; printf("学生信息如下:\n"); printf("--------------------------\n"); for(i=0;i<m;i++) { printf("卡号:%ld\n姓名:%s\n院系:%s\n班级:%ld\n",stu[i].cardnum,stu[i].name,stu[i].academy,stu[i].class_num); printf("--------------------------\n"); }}int main(){ struct student stu[m]; int i,key,j; printf("请输入借书同学的信息:\n"); printf("--------------------------\n"); input(stu); printf("请选择你想要的功能:\n"); printf("1.按照卡号进行排序。\n"); printf("2.按照姓名进行排序。\n"); printf("3.二分查找同学的信息。\n"); printf("4.退出系统。\n"); scanf("%d",&i); switch(i) { case 1: quicksort(stu,0,m-1); printf("排序结果为:\n"); display(stu); break; case 2: sort(stu); printf("排序结果为:\n"); display(stu); break; case 3: printf("请输入要查找的同学的卡号:"); scanf("%d",&key); j=twice_find(stu,key); printf("卡号:%ld\n姓名:%s\n院系:%s\n班级:%ld\n",stu[j].cardnum,stu[j].name,stu[j].academy,stu[j].class_num); break; case 4: break; } return 0;}
阅读全文
0 0
- 快速排序、二分查找 学生信息(可进行姓名查找)
- 题目1069:查找学生信息(二分查找)
- 九度OJ 1069 查找学生信息(二分查找)
- 快速排序+二分查找
- 九度OJ 1069:查找学生信息 (排序、查找)
- poj2503-Babelfish(快速排序+二分查找)
- 快速排序 和 二分查找
- 快速排序与 二分查找
- 二分查找和快速排序
- 二分查找and快速排序
- 二分查找+二分排序(快速排序)
- C#输入姓名或者拼音码(姓名的首字母,大小写均可)进行快速模糊查找
- 二分查找,希尔排序和快速排序
- 冒泡排序,快速排序,二分查找
- php 冒泡排序 快速排序 二分查找
- 选择排序 快速排序 二分查找法
- 冒泡排序 二分查找 快速排序 线性查找
- 二分查找算法(快速查找)
- Kotlin高级函数讲解
- Matlab Example-Time,Date,Week
- 移动web前端开发高效实战(二)
- 【贪心+位运算】BZOJ3668(Noi2014)[起床困难综合症]题解
- Java中StringBuffer与StringBuilder的区别与举例
- 快速排序、二分查找 学生信息(可进行姓名查找)
- java、Map
- 【Scikit-Learn 中文文档】模型持久化
- Zxing和QR CODE 生成与解析二维码实例(普通篇)
- 微信向程序的滑动组件(-)
- JS时间相关操作代码
- Oracle OEM 重建 及 案例 说明
- 新路程------imx6 内核层读写寄存器
- Navicat