学习视频04-使用 sort 排序视频讲解(C++版)_哔哩哔哩_bilibili
S:学会使用sort,以及带有greater<int>()的形式
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int arr[5] = { 2,5,3,1,4 };
sort(arr, arr + 5);
for (int i = 0; i < 5; i++) { //如果是char数组,可以用strlen(ch)
cout << arr[i] << " ";
}
cout << endl;
sort(arr, arr + 5, greater<int>());
for (int i = 0; i < 5; i++) { //如果是char数组,可以用strlen(ch)
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
Q:平均数
int main() {
int n;
cin >> n;
int fen[33] = { 0 };
for (int i = 0; i < n; i++) {
cin >> fen[i];
}
int k, sum = 0;
cin >> k;
sort(fen, fen + 30, greater<int>());
for (int i = 0; i < k; i++) {
sum += fen[i];
}
float avg = sum / k;
printf("%.2f\n", avg);
return 0;
}
Q:分数段统计
int main() {
int n;
cin >> n;
int fen[33] = { 0 };
for (int i = 0; i < n; i++) {
cin >> fen[i];
}
sort(fen, fen + n, greater<int>());
int b[6] = { 0 };
for (int i = 0; i < n; i++) {
if (fen[i] == 100)
b[0]++;
else if (fen[i] >= 90)
b[1]++;
else if (fen[i] >= 80)
b[2]++;
else if (fen[i] >= 70)
b[3]++;
else if (fen[i] >= 60)
b[4]++;
else
b[5]++;
}
for (int i = 0; i < 6; i++)
cout << b[i] << " ";
return 0;
}
S:自定义排序方法
bool cmp(int x, int y) { //cmp为真,则把x放在y前面
return x > y; //不能出现等于号
}
sort(arr, arr + n, cmp);//结构体可以用这种定义
Q:整数排序(结构体)
struct shu {
int yuan;
int mo;
};
bool cmp(shu x, shu y) {
return x.yuan < x.yuan;
}
int main() {
//结构体,数字大小和模三余数。
//按数字排序,遍历3次(输出余数是0,1,2)
int n;
cin >> n;
shu s[105] = { 0 };
for (int i = 0; i < n; i++) {
cin >> s[i].yuan;
s[i].mo = s[i].yuan % 3;
}
sort(s, s + n, cmp);
for (int i = 0; i < n; i++) {
if (s[i].mo == 0)
cout << s[i].yuan << " ";
}
for (int i = 0; i < n; i++) {
if (s[i].mo == 1)
cout << s[i].yuan << " ";
}
for (int i = 0; i < n; i++) {
if (s[i].mo == 2)
cout << s[i].yuan << " ";
}
return 0;
}
也可以这样写个构造函数,函数成员(上面的例子只有成员变量)
struct shu {
int yuan;
int mo;
shu(int y) {
yuan = y;
mo = y % 3;
}
shu(int y = 0,int mo = 0){}
shu(){}
};
Q:评奖
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
struct student{
string name;
int shu;
int yu;
int eng;
int di;
int num = 0;
void sum() {
num = shu + yu + eng + di;
}
};
bool cmp(student x, student y) {
return x.num > y.num;
}
int main() {
int n;
cin >> n;
student stu[42];
for (int i = 0; i < n; i++) {
cin >> stu[i].name >> stu[i].shu >> stu[i].yu >> stu[i].eng >> stu[i].di;
stu[i].sum();
}
sort(stu, stu + n, cmp);
int i = -1;
while (++i!=3) {
cout << stu[i].name << " ";
}
return 0;
}
————————————————————————————————————
学习视频05-使用 sort 排序练习(C++版)_哔哩哔哩_bilibili
Q/S:浮点数排序
const double EPSILON = 1e-6;
double num[105];
bool cmp(double a, double b) {
double da = fabs(a - round(a));//!!
double db = fabs(b - round(b));//!!
if (fabs(da - db) < EPSILON)
return a < b; //表示a,b相等的情况
return da < db;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> num[i];
}
sort(num, num + n, cmp);
for (int i = 0; i < n; i++) {
if (i != n - 1) //!!有可能结尾不让有空格
printf("%lf", num[i]); //!!!不能cout << num[i] << " ";
else
printf("%lf\n", num[i]); //!!!默认都是6位
}
return 0;
}
Q:分数线
int main() {
int n;
cin >> n;
int fen[100005];
for (int i = 0; i < n; i++) {
cin >> fen[i];
}
sort(fen, fen + n, greater<int>());
int num = n / 2 + 1;
int f = fen[n / 2];
for (int i = n / 2; i < n; i++) {
if (fen[i + 1] == fen[i])
num++;
}
cout << f << " " << num;
return 0;
}
Q:交叉排序:
int main() {
int n, l1, l2, r1, r2;
cin >> n >> l1 >> r1 >> l2 >> r2;
int num[10005];
for (int i = 0; i < n; i++) {
cin >> num[i];
}
sort(num + l1 - 1, num + r1);//!!!必须是左边减一个,右边不用减才是第l1~r1个数字
sort(num + l2 - 1, num + r2, greater<int>());
for (int i = 0; i < n; i++) {
if (i != n - 1)
cout << num[i] << " ";
else
cout << num[i] << '\n';
}
return 0;
}
Q:红蓝绿 //字符串/字符数组可以直接sort(ch,ch+len)
bool cmp(char x, char y) {
int a = x - 'A';
int b = y - 'A';
return a < b;
}
int main() {
string s;
cin >> s; //也可以getline(cin, s);
int len = s.length();
char ch[10003];
int n1 = 0, n2 = 0, n3 = 0;
for (int i = 0; i < len; i++) {
ch[i] = s[i];
if (ch[i] == 'B')
n1++;
if (ch[i] == 'G')
n2++;
if (ch[i] == 'R')
n3++;
}
sort(ch, ch + len, cmp);
n1 /= 3;
n2 /= 2;
if (n1 > n2)
n1 = n2;
if (n1 > n3)
n1 = n3;
for (int i = 0; i < len; i++) {
cout << ch[i];
}
cout << '\n' << n1;
return 0;
}
Q:整数排序进阶
bool cmp(int x, int y) {
int sumx = 0, sumy = 0;
int xx = x, yy = y; //!!!!
for (int i = 0; i < 4; i++) {
sumx += x % 10;
x /= 10;
sumy += y % 10;
y /= 10;
}
if (sumx == sumy)
return xx < yy; //!!!!x,y发生了变化
else
return sumx < sumy;
}
using namespace std; int main() {
int n;
cin >> n;
int num[103];
for (int i = 0; i < n; i++) {
cin >> num[i];
}
sort(num, num + n, cmp);
for (int i = 0; i < n; i++) {
if (i != n - 1)
cout << num[i] << " ";
else
cout << num[i];
}
return 0;
}
Q:成绩排序
struct student {
int id;
int grade;
};
bool cmp(student x, student y) {
return x.grade > y.grade;
}
int main() {
int n;
cin >> n;
student stu[102];
for (int i = 0; i < n; i++) {
cin >> stu[i].grade;
stu[i].id = i + 1;
}
sort(stu, stu + n, cmp);
for (int i = 0; i < n; i++) {
cout << stu[i].id << " ";
}
return 0;
}
Q:成绩排序进阶版
struct student {
string name;
int yu;
int shu;
int eng;
int ke;
int sum;
void ssum() {
sum = yu + shu + eng + ke;
}
};
bool cmp1(student x, student y) {
return x.yu > y.yu;
}
bool cmp2(student x, student y) {
return x.shu > y.shu;
}
bool cmp3(student x, student y) {
return x.eng > y.eng;
}
bool cmp4(student x, student y) {
return x.ke > y.ke;
}
bool cmp5(student x, student y) {
return x.sum > y.sum;
}
int main() {
int n;
cin >> n;
student stu[102];
for (int i = 0; i < n; i++) {
cin >> stu[i].name >> stu[i].yu >> stu[i].shu >> stu[i].eng >> stu[i].ke;
stu[i].ssum();
}
sort(stu, stu + n, cmp1);
for (int i = 0; i < 4; i++) {
cout << stu[i].name << " ";
}
cout << '\n';
sort(stu, stu + n, cmp2);
for (int i = 0; i < 4; i++) {
cout << stu[i].name << " ";
}
cout << '\n';
sort(stu, stu + n, cmp3);
for (int i = 0; i < 4; i++) {
cout << stu[i].name << " ";
}
cout << '\n';
sort(stu, stu + n, cmp4);
for (int i = 0; i < 4; i++) {
cout << stu[i].name << " ";
}
cout << '\n';
sort(stu, stu + n, cmp5);
for (int i = 0; i < 4; i++) {
cout << stu[i].name << " ";
}
cout << '\n';
return 0;
}
Q:抢气球
struct student{
int id;
int a;
int sum = 0;
};
bool cmp1(student x, student y) {
return x.a < y.a;
}
bool cmp2(student x, student y) {
return x.id < y.id;
}
int main() {
int n, m;
cin >> n >> m;
int h[1003];
student stu[1003];
for (int i = 0; i < n; i++) {
cin >> stu[i].a;
stu[i].id = i + 1;
}
for (int i = 0; i < m; i++)
cin >> h[i];
sort(stu, stu + n, cmp1);
sort(h, h + m);
int j = 0;
for (int i = 0; i < n; i++) {
while (stu[i].a >= h[j] && j < m) { //!!!要限制j的条件!!!
stu[i].sum++;
j++;
}
}
sort(stu, stu + n, cmp2);
for (int i = 0; i < n; i++)
cout << stu[i].sum<<'\n';
return 0;
}
————————————————————————————————————————
看完一个视频啦,终于!!下一个视频新开一个笔记!再见嘻嘻
(哈哈哈哈哈哈哈)