冒泡排序,选择排序,sort排序
2015-12-31 10:28
155 查看
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;
}
然后输入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;
}
相关文章推荐
- Android UI模板设计
- screen.availWidth and screen.height
- 图解Glide流程
- RedHat修改系统时区
- 微软程序员最好的时代来了
- 日经春秋 20151231
- 天声人語 20151231 話が通じなかった1年
- android常用网址收集
- 设置Eclipse工作区编辑宽度
- 2015年终总结
- 成员模板函数不能为虚函数,同时也不能有默认参数
- MongoDB:Map-Reduce
- DIV如何圆角化,包括图片的DIV如何圆角化
- Git Tag 的使用
- 阻止input文本框输入回车键时,出现表单提交事件
- Java创建文件并写入字符串
- 面试题38:丑数
- Spring学习4_DispatcherServlet详解
- QT5.3.1和opencv的配置问题
- 关于Zipalign的介绍和使用方法