gpt4 book ai didi

c++ - 部分排序 : nth elements having preseved order

转载 作者:太空宇宙 更新时间:2023-11-04 13:33:58 25 4
gpt4 key购买 nike

任务是对具有重复项 s.t. 的 vector 进行部分排序。如果对 vector 进行排序,则中位数(第 n 个元素)位于应有的位置。所有较小的元素都应该在左边,所有较大的元素在右边。值与中位数相同的所有元素都必须按原始顺序 - 但只有这些元素而不是其余元素。

你会如何解决这个问题?

我最初的解决方案:

  1. 使用 std::nth_element() 寻找中值元素
  2. 遍历 vector ,只对与中值相同的元素的索引进行排序。我将如何有效地做到这一点?

最佳答案

使用分区或稳定分区(以保留原始顺序)。

class Predicate{
int median_value;
public:
Predicate(int med) : median_value(med) {}
bool operator()(int x){
return x < median_value;
}
};

int main(){

vector<int> v{ 10, 20, 30, 10, 30};

int median = 20;

cout << "median = " << median << endl;

stable_partition(v.begin(), v.end(), Predicate(median));

for ( auto i : v)
cout << i << " ";
}

关于c++ - 部分排序 : nth elements having preseved order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30391288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com