冒泡排序,选择排序,sort排序

来源:互联网 发布:詹宁斯cba数据 编辑:程序博客网 时间:2024/06/01 07:27

1.首先用scanf接收n个同学,然后在键盘上输入n个同学的姓名和成绩,空格分开。

然后输入1 2 3 序号分别选择三种排序方式,回车结束。程序会自动根据你选择的排序方式进行排序。

2.首先用scanf接收有几个数字,然后输入n个无序的数。调用快速排序函数,得出结果。

#include <stdio.h>#include <algorithm>using namespace std;struct student{char name[30];int grade;}stu[105];//sort排序条件 bool cmp(student a,student b) {if(a.grade>b.grade) return true;return false;} //sort函数排序 void use_sort(int n){sort(stu,stu+n,cmp); }//冒泡排序 void use_bubblesort(int n){for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){if(stu[i].grade<stu[j].grade){student temp;temp=stu[i];stu[i]=stu[j];stu[j]=temp;}}}}//选择排序 void use_choosesort(int n){for(int i=0;i<n;i++){int max=-0x3fffffff;int mark=0;for(int j=i;j<n;j++){if(max<stu[j].grade){max=stu[j].grade;mark=j;}}student temp;temp=stu[mark];stu[mark]=stu[i];stu[i]=temp; }}int main(){int n;printf("请输入人数n\n"); while(scanf("%d",&n)&&n){printf("请输入%d个同学的姓名和分数,并以空格分开\n",n);//输入n个同学的姓名和成绩 for(int i=0;i<n;i++)scanf("%s %d",stu[i].name,&stu[i].grade);printf("请按序号选择你需要的排序方式,回车结束\n");printf("1.sort函数排序\n");printf("2.冒泡法排序\n");printf("3.选择法排序\n");int choose;scanf("%d",&choose);if(choose==1) use_sort(n);if(choose==2)use_bubblesort(n); if(choose==3)use_choosesort(n); int rank=1; printf("(1)按分数高低次序,打印出每个学生在考试中获得的名次,\n分数相同的为同一名次;\n"); printf("%s 1\n",stu[0].name);for(int i=1;i<n;i++){if(stu[i].grade!=stu[i-1].grade)rank++;printf("%s %d\n",stu[i].name,rank);} printf("(2)按名次列出每个学生的姓名与分数。\n");for(int i=0;i<n;i++){printf("%s %d\n",stu[i].name,stu[i].grade); } printf("请输入人数n\n"); }return 0;}


0 0