快速排序、二分查找 学生信息(可进行姓名查找)
2017-12-05 18:23
459 查看
代码:
#include<stdio.h> #include<stdlib.h> #define m 3 struct 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("-------- a14f ------------------\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; }
相关文章推荐
- 集合练习。学生信息包括学号、姓名、出生日期、性别。把N个学生的信息放入一个集合中。可以根据学号,对学生信息进行检索。并可以根据生日进行排序输出。
- 读入通讯录信息,查找姓名来搜索号码,性别等信息,并对通信录的姓名进行排序。C++
- 各种排序方法(冒泡,快速,插入,选择),二分查找
- 九度题目1069:查找学生信息(二分查找)
- 九度OJ 1069:查找学生信息 (排序、查找)
- 【java编程】Map集合之TreeMap按学生姓名进行升序排序
- 快速排序和二分查找的练习
- 九度OJ 1069 查找学生信息(二分查找)
- 插入,冒泡,选择,快速排序,二分查找(Java版)
- 笔试面试最常涉及到的12种排序算法(包括插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序、桶排序、计数排序和基数排序)进行了详解。每一种算法都有基本介绍、算
- 算法---冒泡排序,快速排序,二分查找(折半查找),选择排序,插入排序
- 九度OJ 1069:查找学生信息 (排序、查找)
- [示例-NSArray排序]-根据班级、姓名和年龄排序学生信息
- 2015/10/06写下的归并排序、快速排序、二分查找
- 要求从用户输入的多行文本中提取学生的姓名、学号及登录日期,并封装到 Student 类中作为类的私有属性。创建一个Student类型的对象数组,对学号进行 升序排序并输出。
- 对整数数组进行二分查找;传数组指针会丢失数组大小信息。
- 快速排序与二分查找
- C语言快速排序与二分查找算法示例
- 编写一个学生信息管理系统:学生信息包括有(学生学号、姓名、性别、手机号码),系统以学生对象数组的方式存储学生信息 (初始数组为10个元素,每当数组存储满时,需要进行扩容,规则可以为翻倍也可以固定增长
- 随机生成1024个数,用指针进行排序,并实现二分查找