sort与nth_element使用

sort与nth_element使用

  • sort

sort函数是C++中对于跟定区间的所有元素进行排序的函数,默认为升序排序,sort时间复杂度为O(nlog2n),因为sort函数底层使用的是快速排序算法。包含在algorithm头文件中

#include <algorithm>
//sort函数用法
sort(start, end, cmp);
//start指的是排序数组的第一个位置、
//end指的是排序数组最后一个位置的下一位
//cmp为可选项,可不填,也可以自己定义排序方法
函数名功能描述底层实现
sort对于给定区间元素进行描述(不稳定)快速排序
stable_sort对于给定区间元素进行稳定排序归并排序
partial_sort对于给定区间元素进行部分排序交换元素存储位置
partial_sort_copy对于给定区间元素复制并且排序拷贝后交换元素存储位置
is_sorted判断一个区间是否排好序未知😂
partition使得符合某个条件的元素放在前面快速排序
stable_partition相对稳定的使得某个条件元素放在前面快速排序
nth_element找到给定区间对应元素的值快速选择排序
  • nth_element

nth_element()方法主要是求给定区间第k小的元素,与普通的排序不同,它只是选取给定的第k个元素大小所在的固定的位置,底层实现是快速选择排序。值得注意的是nth_element得到的元素序列是乱序的,但是第k个元素位置是正确的

//nth_element使用方法
nth_element(start, start + k, end);
//start表示数组开始的位置
//start + k表示数组升序情况下第k个位置应该对应的数据元素
//end表示数组结束的位置

C++reference有对应nth_element的讲解

// nth_element example
#include <iostream>     // std::cout
#include <algorithm>    // std::nth_element, std::random_shuffle
#include <vector>       // std::vector

bool myfunction (int i,int j) { return (i<j); }

int main () {
  std::vector<int> myvector;

  // set some values:
  for (int i=1; i<10; i++) myvector.push_back(i);   // 1 2 3 4 5 6 7 8 9

  std::random_shuffle (myvector.begin(), myvector.end());

  // using default comparison (operator <):
  std::nth_element (myvector.begin(), myvector.begin()+5, myvector.end());

  // using function as comp
  std::nth_element (myvector.begin(), myvector.begin()+5, myvector.end(),myfunction);

  // 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;
}

possible output

myvector contains: 3 1 4 2 5 6 9 7 8
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值