【c++】sort函数使用方法
sort函数包含在头文件#include<algorithm>
的c++标准库中。对于喜欢在洛谷力扣刷题的算法大佬来说, #include<bits/stdc++.h>
也包含了这个函数。
示例代码
#include <iostream>
#include <algorithm> // 包含了sort函数
using namespace std;
int main() {
int arr[] = {3, 1, 4, 1, 5, 9, 2, 6}; // 待排序的数组
// 获取数组的长度
int length = sizeof(arr) / sizeof(arr[0]);
// 使用sort函数对数组进行排序,从小到大排序
sort(arr, arr + length);
// 输出排序后的数组
cout << "排序后的数组:";
for (int i = 0; i < length; ++i) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
关于获取数组长度
size()和sizeof操作符都可以用来获取数组的长度。
1.size()是一个成员函数,通常用于获取标准库中的容器(如std:vector,std:arry)中元素的个数,也可以用来返回字符串std:string的长度
示例代码
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
cout << "容器中元素的个数:" << vec.size() << endl;
return 0;
}
输出的将是
容器中元素的个数:5
2.sizeof是一个操作符,用于计算数据类型或对象所占用的占用空间大小(以字节为单位)
示例代码
#include <iostream>
using namespace std;
int main() {
int arr[] = {1, 2, 3, 4, 5};
cout << "数组的大小:" << sizeof(arr) << " 字节" << endl;
cout << "数组元素的个数:" << sizeof(arr) / sizeof(arr[0]) << endl;
return 0;
}
输出的将是
数组的大小:20 字节
数组元素的个数:5
在这个示例中,sizeof(arr)返回的是所占的空间大小,而sizeof(arr[0])返回数组中第一个元素的大小。通过将总大小除以每个元素的大小,我们可以得到数组中元素的个数。
说回sort函数
一般从小到大排序直接用sort(arr,arr+length)就行了,但sort函数的模版应该是有三个参数的
void sort( RandomIt first, RandomIt last, Compare comp );
1.第一个参数first:是排序数组的起始地址。
2.第二个参数last:是数组最后一个数据的后一个数据的地址(假设我创建了一有9个元素的数组a,那么sort(a,a+10)才合法,为什么是a+10而不是a+9呢?因为sort方法实际上最后一位是不取的。)
3.第三个参数comp是自定义排序的方法:可以是升序也可以是降序和绝对值大小比较排序。第三个参数不写的话,则默认的排序方法是从小到大排序。
假设我要用第三个参数设定一个按照绝对值大小进行排序。
#include <iostream>
#include <vector>
#include <algorithm>
// 自定义的比较函数,按照元素的绝对值大小进行比较
bool compare_abs(int a, int b) {
return abs(a) < abs(b);
}
int main() {
std::vector<int> vec = {3, -1, 4, -1, 5, 9, -2, 6};
// 使用自定义的比较函数对数组进行排序
std::sort(vec.begin(), vec.end(), compare_abs);
// 输出排序后的数组
std::cout << "排序后的数组:";
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
在这个例子中,compare_abs 是一个自定义的比较函数,用于比较两个元素的绝对值大小。然后,在 std::sort 函数中传入这个自定义的比较函数,以实现按照元素绝对值大小进行排序。