sort
程序员文章站
2024-03-17 08:30:40
...
srot
提醒:不要觉得这些很难,你觉得现在掌握的知识跟不上,就不学了,想等着以后老师教。
emmm, 放心,这些老师不会教,you不自己学,you就永远也不会。STL就是一个工具,仅此而已。
不要一看到新事物,就觉得自己一定不会。不是的。
一:sort的引入? |
---|
sort是一个工具,更标准的来说,sort是一个函数 |
像scanf,scanf就是一个函数,他也是一个工具,作用是输入数据 |
而 sort的作用是排序 |
在C语言中scanf的头文件是:<stdio.h> |
而 sort的头文件是 |
不需要深究,问,就是龟腚 |
二:sort的用法 |
---|
scanf的用法: scanf("%d", &x); |
而sort也有规范的用法: |
若有一个数组a,总大小是N |
那么: sort(a, a + N); |
更规范一点:sort( 数组的初始位置,数组的结束位置 ); |
结果是a中的元素,从小到大排序。 |
三:更近一步 |
---|
sort默认的是从小到大排序 |
如果想让sort从大到小排序呢??? |
可以自己定义排序的规则。需要自己写一个函数。 |
或许,你现在还要说,我没学过函数。 |
这也很简单。 |
main就是一个函数,main前面有个int,最后面有一个return 0; |
所以main函数就是一个带有返回值的函数,如果main前面是void,那么main就是一个不带有返回值的函数。 |
先大概这么理解,可以粗略的想:如果有一个很复杂的程序,内容都在main函数里,让别人看了,岂不很不舒服,用函数就可以把这些代码分成块,封起来,用的时候,直接写main函数中; |
当然函数也能实现一些特殊的效果。 |
就比如这个sort排序,用函数可以对sort自定义排序规则。 |
排序规则1:
代码就不给了,看看图片吧。
你看完之后有可能的疑惑:
-
for(auto e : a)
是啥玩意???再问,就去问同学,说题目的时候已经说了好几次。
为了表示友好,还是在第二个输出中,用的普通的for,你只要知道,他们的作用是一样的!
-
cmp里定义的两个int型,这表示对int型的数据做比较,你可以自己更改,改成char? double? 又或者string ? 都可以,自己去尝试。
排序规则2:
结构体型数据,大一的同学,你们现在完全可以理解结构体,请往下看:
ps:如果你觉得你看懂,那你永远也看不懂。
结构体 |
---|
就是把多个基本类型合起来,变成一个新的类型,你可以将两个int合起来,那么结构体就包含两个int的数据,这可以随便用。 |
也可以int int double, 也可以 string char int。。。随你 |
下面给出 结构体的简单定义: |
不明白,可以自己去搜。
假如你已经知道结构体是怎么回事了:
输出:
2 1
1 2
1 1
如果你能把上面的研究明白,那好,就已经了解sort的用法了,就有能力多做不少题了。
下面是另外几个定义排序的方法,可以尝试看,在排序规则2和下面的这些里面选一种使用即可:
排序规则3:
#include <iostream>
#include <algorithm>
using namespace std;
struct name
{
int a;
int b;
};
int main()
{
name a[] = {{1, 2}, {1, 1}, {2, 1}};
auto cmp = [](name x, name y) {
if (x.a == y.a)
return x.b > y.b;
else
return x.a > y.a;
};
sort(a, a + 3, cmp);
for (auto e : a)
cout << e.a << " " << e.b << endl;
return 0;
}
排序规则4:
#include <iostream>
#include <algorithm>
using namespace std;
struct name
{
int a;
int b;
};
int main()
{
name a[] = {{1, 2}, {1, 1}, {2, 1}};
sort(a, a + 3, [](name x, name y) {
if (x.a == y.a)
return x.b > y.b;
else
return x.a > y.a;
});
for (auto e : a)
cout << e.a << " " << e.b << endl;
return 0;
}
排序规则5:
#include <iostream>
#include <algorithm>
using namespace std;
struct name
{
int a;
int b;
bool operator<(const name e) const
{
if (a == e.a)
return b > e.b;
else
return a > e.a;
}
};
int main()
{
name a[] = {{1, 2}, {1, 1}, {2, 1}};
sort(a, a + 3);
for (auto e : a)
cout << e.a << " " << e.b << endl;
return 0;
}
下一篇: hdu 1698
推荐阅读
-
sort
-
希尔排序-Shell Sort
-
希尔排序( shell sort )
-
图解希尔排序(Shell Sort)
-
插入排序—希尔排序(Shell`s Sort)
-
Heap Sort 实现(MIT Algorithm Course) 博客分类: python pythonheapsortalgorithm
-
LeetCode[排序] - #148 Sort List 博客分类: LeetCode LeetCodeJavaAlgorithm题解排序
-
stl中list的sort()函数解析
-
牛客网暑期ACM多校训练营(第三场)# E-Sort String (next数组的应用)H Diff-prime Pairs
-
sort -k选项的注意事项 博客分类: Linux Apple