前言:前面耽误太多时间,2月份是代码月,一定抓紧赶上,每天至少两道题
day1 2024.2.6
1.排序开启:
1.机试考试:排序应用考察
c的qsort c++的sort
作用:对数组,vector排序;自定义排序规则
#include<algorithm>
2.注意:arr是数组名,当他作为函数参数时,会退化成数组首地址
(1)静态动态数组排序
上图就是对数组进行排序
(2)自定义方式排序、说明我们现在目标就是设计compare,compare可以设计出任何类型
(3)compare是我们的关键部分
返回bool类型;它的参数类型和原来数组类型一致
compare函数内容:当数据不会发生交换时候,返回真
比如我们想要升序:左>又
2.奇偶整数排序
1.题目:3446. 整数奇偶排序 - AcWing题库
2.思路:不就是设计compare吗,那我第一次先把奇偶分开,第二次排序奇数,第三次排序偶数
老师思路
3.代码
//题目:给10个数,把这十个数排序,先输出奇数,降序;再输出偶数,升序
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
bool compare1(int lf, int rt)
{return lf % 2 == 1 && rt % 2 == 0;//先把奇偶分开
}
bool compare2(int lf, int rt)
{return lf % 2 == 1 && rt % 2 == 1 && lf > rt;
}
bool compare3(int lf, int rt)
{return lf % 2 == 0 && rt % 2 == 0 && lf < rt;
}
int main()
{int a[10];for (int i = 0; i < 10; i++)cin >> a[i];//现在排序//先去写comparesort(a, a + 10, compare1);现在他是先输出奇数,在输出偶数sort(a, a + 10, compare2);sort(a, a + 10, compare3);for (int i = 0; i < 10; i++)cout<< a[i]<<' ';
}
3.成绩排序
1.题目:
2.思路:自定义类型,别用map,struct可好用了,定义student类型的数组student t[1000]={0};就好了;然后就是写compare函数,可太好写了,一遍过
3.代码:
/*给定学生的成绩单,成绩单中包含每个学生的学号和分数,
请将成绩单按成绩从低到高的顺序重新排序。
如果学生的成绩相同,则按照学号从小到大的顺序进行排序。*/
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
/*bool compare1(int lf, int rt)
{//既然是有学号有成绩,两个东西,那就用map//map.entryset()是取值的意思return lf < rt;
}
bool compare2(int lf, int rt)
{//既然是有学号有成绩,两个东西,那就用map//map.entryset()是取值的意思return lf <= rt;
}
int main()
{int n; cin >> n;map<int, int> map1;int si, sc;for(int i=0;i<n;i++){//现在输入了全部的cin >> si >> sc;map1.insert({ si,sc });}map<int, int>::iterator it;//取出成绩,进行sortsort(map1.begin()->second, map1.end()->second, compare1);for (it=map1.begin();it!=map1.end();it++){if(it->second==it->second)}}*/
typedef struct student
{int number;int score;
}student;
bool compare(student lf, student rt)
{return lf.number != rt.number && lf.score < rt.score || lf.number < rt.number && lf.score == rt.score;
}
int main()
{int n; cin >> n; student t[1000] = { 0 };for (int i = 0; i < n; i++)cin >> t[i].number >> t[i].score;sort(t, t + n, compare);for (int j = 0; j < n; j++)cout << t[j].number << ' ' << t[j].score << '\n';
}
是不是这题太简单了,还是我能力提高了
明天加油