sort排序
有两种使用方式
方式一(默认) | void sort (RandomAccessIterator first, RandomAccessIterator last); |
---|---|
方式二(比较器) | void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp); |
算法原理:当数据量较大时采用快速排序,分段递归。一旦分段后的数据量小于某个阀值,为避免递归调用带来过大的额外负荷,便会改用插入排序。而如果递归层次过深,有出现最坏情况的倾向,还会改用堆排序。但无论使用什么算法时间复杂度都为O(nlogn)。
比较器代码:当然对于结构体也可以进行比较。
bool cmp(int num1, int num2) {
return num1 > num2; // 可以简单理解为 > 降序排列; < 升序排列
}
bool cmp(Student s1, Student s2) { // 自定义排序
if (s1.grade != s2.grade) { // 如果学生成绩不相同
return s1.grade > s2.grade; // 则按照成绩降序排列
}
return s1.name < s2.name; // 否则按照姓名升序排列
}
遇到的问题
如果使用两层for循环会超时
代码
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
int len=nums.size();
for(int i=0;i<len;++i){
for(int j=i+1;j<len;++j){
if(nums[i]==nums[j]) return true;
}
}
return false;
}
};