C++ sort排序函数用法

本文详细介绍了C++标准库中的sort函数用法,包括两个参数及三个参数的使用方式,并通过实例展示了如何进行升序与降序排列。此外,还提供了使用自定义比较函数和对象作为比较器的方法。

最近在刷ACM经常用到排序,以前老是写冒泡,可把冒泡带到OJ里后发现经常超时,所以本想用快排,可是很多学长推荐用sort函数,因为自己写的快排写不好真的没有sort快,所以毅然决然选择sort函数

用法

1、sort函数可以三个参数也可以两个参数,必须的头文件#include < algorithm>和using namespace std;
2、它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n)

3、Sort函数有三个参数:(第三个参数可不写)

(1)第一个是要排序的数组的起始地址。

(2)第二个是结束的地址(最后一位要排序的地址)

(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。

两个参数用法

#include <iostream>
#include <algorithm>
int main()
{
 int a[20]={2,4,1,23,5,76,0,43,24,65},i;
 for(i=0;i<20;i++)
  cout<<a[i]<<endl;
 sort(a,a+20);
 for(i=0;i<20;i++)
 cout<<a[i]<<endl;
 return 0;
}

输出结果是升序排列。(两个参数的sort默认升序排序)


三个参数

// sort algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::sort
#include <vector>       // std::vector

bool myfunction (int i,int j) { return (i<j); }//升序排列
bool myfunction2 (int i,int j) { return (i>j); }//降序排列

struct myclass {
  bool operator() (int i,int j) { return (i<j);}
} myobject;

int main () {
    int myints[8] = {32,71,12,45,26,80,53,33};
  std::vector<int> myvector (myints, myints+8);               // 32 71 12 45 26 80 53 33

  // using default comparison (operator <):
  std::sort (myvector.begin(), myvector.begin()+4);           //(12 32 45 71)26 80 53 33

  // using function as comp
  std::sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)
    //std::sort (myints,myints+8,myfunction);不用vector的用法
    
  // using object as comp
  std::sort (myvector.begin(), myvector.end(), myobject);     //(12 26 32 33 45 53 71 80)

  // print out content:
  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)//输出
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

string 使用反向迭代器来完成逆序排列

#include <iostream>
using namespace std;
int main()
{
     string str("cvicses");
     string s(str.rbegin(),str.rend());
     cout << s <<endl;
     return 0;
}
//输出:sescivc
### `std::sort` 函数的使用方法及示例 `std::sort` 是 C++ 标准库中的一个高效排序函数,定义在 `<algorithm>` 头文件中。它采用快速排序的优化变体(通常是 introsort),具有较高的性能,适用于大多数需要排序的场景。 #### 基本语法 `std::sort` 的基本形式如下: ```cpp template<class RandomIt> void sort(RandomIt first, RandomIt last); ``` 它接受两个迭代器参数 `first` 和 `last`,表示要排序的范围 `[first, last)`。默认情况下,该函数按照升序对元素进行排序。 #### 升序排序示例 以下是一个对 `std::vector<int>` 进行升序排序的示例: ```cpp #include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> numbers = {5, 2, 8, 3, 1}; std::sort(numbers.begin(), numbers.end()); std::cout << "升序排序结果:"; for (int num : numbers) { std::cout << num << " "; } std::cout << std::endl; return 0; } ``` 该程序输出为:`1 2 3 5 8` [^3]。 #### 降序排序 若要实现降序排序,可以提供一个自定义比较函数。例如,使用 lambda 表达式作为第三个参数: ```cpp std::sort(numbers.begin(), numbers.end(), [](int a, int b) { return a > b; }); ``` 这将按照从大到小的顺序排列元素 [^2]。 #### 自定义类型排序 对于自定义类型(如结构体或类),需要提供一个比较函数来定义排序规则。例如,定义一个 `Person` 结构体,并根据其 `age` 成员进行排序: ```cpp struct Person { std::string name; int age; }; bool compareByAge(const Person& a, const Person& b) { return a.age < b.age; } int main() { std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}, {"Charlie", 35}}; std::sort(people.begin(), people.end(), compareByAge); return 0; } ``` #### 注意事项 - `std::sort` 要求容器支持随机访问迭代器,因此它适用于 `std::vector`、数组和 `std::deque` 等容器。 - 不要将 `std::sort` 应用于关联容器(如 `std::map` 或 `std::set`),因为它们内部已经维护了有序性 [^1]。 - 自定义比较函数必须满足严格弱序(strict weak ordering)的要求,否则可能导致未定义行为。
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值