前言
今天,在给一个bool数组排序时,想当然得直接调用std::sort
来排序,虽然很简单,但显然并不是高效的排序方式,直接被mentor劈头盖脸说了一顿。。。。查了些资料,特地来总结一番。
1. 使用std::sort
最直接的方法就是使用C++标准库中的std::sort
算法。简单、直观,但对于布尔值排序来说,效率并不是最优的。
#include <algorithm>
#include <vector>
void sort_bools_std_sort(std::vector<bool>& data) {
std::sort(data.begin(), data.end());
}
std::sort
使用了快速排序或者内省排序等复杂的排序算法,对于简单的布尔值排序来说,时间复杂度为O(nlogn)
。
2. 使用std::partition
一种更高效的方法是利用std::partition
算法。这种方法将值为true的元素移动到容器前半部分,值为false的元素移动到后半部分,避免了不必要的元素交换。
#include <algorithm>
#include <vector>
void sort_bools_partition(std::vector<bool>& data) {
auto partition_iter = std::partition(data.begin(), data.end(), [](bool b