您的位置:首页 > 其它

冒泡排序,选择排序,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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: