直接插入排序,快速排序,选择排序给学生成绩排名
2015-12-16 00:00
453 查看
摘要: 给出n个学生的考试成绩表,每条信息由姓名和分数组成,设计算法:
1. 按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次;
2. 按名次列出每个学生的姓名与分数。
首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。
主控菜单设计要求:程序运行后,显示一个标题“学生成绩排序”,标题下方给出6个菜单项的内容和输入提示:
1.输入学生数
2.输入学生姓名及成绩
3.用直接插入排序输出名次
4.用快速排序输出名次
5. 用选择排序输出名次
6.退出
请选择菜单1—6:
1. 按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次;
2. 按名次列出每个学生的姓名与分数。
首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。
主控菜单设计要求:程序运行后,显示一个标题“学生成绩排序”,标题下方给出6个菜单项的内容和输入提示:
1.输入学生数
2.输入学生姓名及成绩
3.用直接插入排序输出名次
4.用快速排序输出名次
5. 用选择排序输出名次
6.退出
请选择菜单1—6:
#include<stdio.h> #include<malloc.h> #include<string.h> typedef struct{ char name[20]; int score; }ElemType; typedef struct{ ElemType *elem; int length; }SqList; void menu(); void SlectSort(SqList L); void InsertSort(SqList ST); int partition(SqList &L,int low,int high); void Qsort(SqList &L,int low,int high); int main() { printf("\n******学生成绩排序******"); printf("\n\n**************************\n"); printf(" 1 ------- 输入学生数\n"); printf(" 2 ------- 输入学生姓名及成绩\n"); printf(" 3 ------- 用直接插入排序输出名次\n"); printf(" 4 ------- 用快速排序输出名次\n"); printf(" 5 ------- 用选择排序输出名次\n"); printf(" 6 ------- 退出\n"); printf(" 请选择1-6\n"); printf("**************************\n"); menu(); return 0; } void menu() { SqList ST; int key,n,i,done=1; while (done) { printf("请输入数字 : "); scanf("%d",&key); switch(key) { case 1: printf("请输入学生数:(n>=10)"); scanf("%d",&n); break; case 2: ST.length=n; ST.elem=(ElemType*)malloc((n+1)*sizeof(ElemType)); for(i=1;i<=n;i++) { printf("请输入第%d个学生的基本信息:(姓名 成绩)\n",i); scanf("%s%d",ST.elem[i].name,&ST.elem[i].score); } break; case 3: //直接插入排序 InsertSort(ST); break; case 4: //快速排序 Qsort(ST,1,ST.length); for(i=1;i<=ST.length;i++) printf("第%d名:%s %d\n",i,ST.elem[i].name,ST.elem[i].score); break; case 5: //选择排序 SlectSort(ST); break; case 6: done=0; break; default: printf(" ERROR\n"); } printf("\n"); } } void InsertSort(SqList ST) { int i,j; for(i=2;i<=ST.length;++i) if(ST.elem[i].score>ST.elem[i-1].score) { ST.elem[0]=ST.elem[i]; ST.elem[i]=ST.elem[i-1]; for(j=i-2;ST.elem[0].score>ST.elem[j].score;--j) ST.elem[j+1]=ST.elem[j]; ST.elem[j+1]=ST.elem[0]; } for(i=1;i<=ST.length;i++) printf("第%d名:%s %d\n",i,ST.elem[i].name,ST.elem[i].score); } int partition(SqList &L,int low,int high) { int pivotkey; pivotkey=L.elem[low].score; L.elem[0]=L.elem[low]; while(low<high) { while(low<high&&L.elem[high].score<=pivotkey) --high; L.elem[low]=L.elem[high]; while(low<high&&L.elem[low].score>=pivotkey) ++low; L.elem[high]=L.elem[low]; } L.elem[low]=L.elem[0]; return low; } void Qsort(SqList &L,int low,int high) { int pivotloc; if(low<high) { pivotloc=partition(L,low,high); Qsort(L,low,pivotloc-1); Qsort(L,pivotloc+1,high); } } void SlectSort(SqList L) { int i,j,k; ElemType temp; for(i=1;i<L.length;i++) { k=i; for(j=i+1;j<=L.length;j++) if(L.elem[j].score>L.elem[k].score) k=j; if(i!=k) { temp=L.elem[k]; L.elem[k]=L.elem[i]; L.elem[i]=temp; } } for(i=1;i<=L.length;i++) printf("第%d名:%s %d\n",i,L.elem[i].name,L.elem[i].score); }
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 在命令行用 sort 进行排序
- 如何写好 C main 函数
- 文件遍历排序函数
- C#数据结构之顺序表(SeqList)实例详解
- C#选择排序法实例分析
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- Lua教程(七):数据结构详解
- C#实现Datatable排序的方法
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- SQLSERVER的排序问题结果不是想要的
- Windows Powershell排序和分组管道结果
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#通过IComparable实现ListT.sort()排序
- C#数据结构之单链表(LinkList)实例详解
- C#选择法排序实例分析
- SQL学习笔记四 聚合函数、排序方法
- C#对list列表进行随机排序的方法