算法题目练习008:成绩排序(排序函数sort(first, last,comp)的使用)

void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

 sort函数:第一个参数为要排序的起始位置,如果是数组,就是数组的起始地址
               第二个参数为要排序的结束位置, 如果是数组,就是数组起始地址+数组结点个数,并非按照地址计算(不需要*4, 下面举例说明)

第三个参数为一个函数,可以直接不写,那么为默认按升序排列,如果写此参数,需自行定义一个函数,该函数格式为return a>b;,如果返回值为true,,表明a确实大于b, 比较符号的左侧会排在前面,在本例中a在前,如果为false,则右侧在前。(为便于记忆,也不需要看返回值多少,我们只看中间比较符号是什么,如果是>号,更大的在前, <号则为更小的在前)下面举例详细说明

题目描述:用一维数组存储学号和成绩, 然后按成绩排序输出,如果成绩相同,按照学号从小到大排序

input:

outout: 

#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;

struct Student{
	int num;
	int score;
};

int compare(Student x, Student y){    //此函数中,若成绩相等,则按照学号升序排列,分数不相等,则分数小的在前面
	if(x.score == y.score)
		return x.num < y.num;
	else
		return x.score < y.score;
}

int main(){
	int count;
	scanf("%d", &count);
	Student a[count];
	for(int i=0; i<count; i++){
		scanf("%d%d", &a[i].num, &a[i].score);
	} 
	sort(a, a+count, compare);        //此处为+count
	for(int j=0; j<count; j++)
		printf("%d %d\n", a[j].num, a[j].score);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值