1.交换两个变量a和b
我最初在实现的时候,编写下面的函数
void swap_int(int a, int b)
{
int t = a;
a = b;
b = t;
}
这是最典型的错误,这是因为它只是交换了形参,而并未改变真实的实参
正确的实现应该是这样子的
void swap_int(int &a, int &b)
{
int t = a;
a = b;
b = t;
}
其实在C++标准库里有swap的实现:在C++11中,此函数不再在头文件algorithm中定义,而是在在头文件utility中定义
2.sort
- 2.1简介
1.sort函数可以三个参数也可以两个参数,必须的头文件#include<algorithm>
和using namespace std;
2.它使用的排序方法是类似于快排的方法,时间复杂度为 n ∗ l o g 2 n n*log_{2}{n} n∗log2n
3.Sort函数有三个参数:(第三个参数可不写)
(1)第一个是要排序的数组的起始地址
(2)第二个是结束的地址(最后一位要排序的地址)
(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序 - 2.2前两个参数
vector<int> arr = {1, 5, 8, 9, 6, 7, 3, 4, 2, 0};
sort(arr.begin(), arr.end());
// 输出 0 1 2 3 4 5 6 7 8 9
- 2.3三个参数,逆序输出
bool compare(int a, int b)
{
// 降序排序函数
return a > b;
}
vector<int> arr = {1, 5, 8, 9, 6, 7, 3, 4, 2, 0};
sort(arr.begin(), arr.end(), compare);
// 输出 9 8 7 6 5 4 3 2 1 0
- 2.4三个参数,二维vector,按每一个vector元素的第1个数升序排序
bool compareInterval(vector<int> i1, vector<int> i2)
{
// 升序排序
return (i1[0] < i2[0]);
}
vector<vector<int>> arr2 = {{6, 8}, {1, 9}, {2, 4}, {4, 7}};
sort(arr2.begin(), arr2.end(), compareInterval);
int l = arr2.size();
for (int i = 0; i < l; i++)
cout << "[" << arr2[i][0] << "," << arr2[i][1] << "] ";
// 输出 [1,9] [2,4] [4,7] [6,8]