北京微信网站制作费用订阅号可以建设微网站
news/
2025/9/29 0:37:41/
文章来源:
北京微信网站制作费用,订阅号可以建设微网站,国家反诈中心app下载流程,山东线上推广软件设想一下#xff0c;如果待排元素不是一个简单的整数#xff0c;而是一个庞大的结构体#xff0c;移动元素的时间不能忽略不计。
元素需要频繁互换#xff0c;那么移动这些元素的时间将会非常长久#xff0c;效率很低
typedef very_large_item {int comparable;Tp very_…设想一下如果待排元素不是一个简单的整数而是一个庞大的结构体移动元素的时间不能忽略不计。
元素需要频繁互换那么移动这些元素的时间将会非常长久效率很低
typedef very_large_item {int comparable;Tp very_large_data;
} very_large_item_collection[Nm] {}; 间接排序定义一个指针数组作为“表”table。 在表排序的过程中实际上是不需要移动那些原始数据的要移动的只是指向他们位置的那些指针。 不移动元素本身而只移动元素本身的排序方法我们称之为“间接排序”。 对target结构体数组进行表排序
std::arrayint, __MAX__ indices {};
std::iota(indices.begin(), indices.begin() distance, 0);
std::sort(indices.begin(), indices.begin() distance,
[](auto i, auto j){return binary_cmptor(target[i], target[j]);
});for(int i {}; i distance; i) visit(target[indices[i]]); 交换环N个数字的排列由若干个独立的环组成。 在排序过程中可能需要在不同的计算节点之间交换数据以便进行合并或比较操作。交换环提供了一种机制使得数据可以在节点之间以循环的方式传递从而实现高效的通信。 #include array
#include algorithm
#include functional
#include numeric
#include iterator
#include concepts
#include random
#include iostreamconstexpr auto __MAX__ { static_castint(1e3) };template typename RandomIt, typename Compare std::less
void physical_sort(RandomIt first, RandomIt last, Compare comp) {using value_type typename std::iterator_traitsRandomIt::value_type;
/*
* static_assert(std::is_default_constructiblevalue_type::value
* std::assignable_fromvalue_type, value_type );
*
* statements above is not neccessary:
* all declared whereat std::sort requirements and static assertions.
*/auto distance { static_castint(std::distance(first, last)) };std::arrayint, __MAX__ indices {};std::iota(indices.begin(), indices.begin() distance, 0);std::sort(indices.begin(), indices.begin() distance,[](auto i, auto j){return comp(*(first i), *(first j));});for(int i {}; i distance; i) {if(indices[i] i) continue;value_type temporary {};(void) std::exchange(temporary, std::move(*(first i)));int j { i }, previous {};while(! (indices[j] j)) {previous j;(void) std::exchange(*(first j),std::move(*(first indices[j])));std::swap(j, indices[j]);}(void) std::exchange(*(first previous), std::move(temporary));}
}template typename RandomIt
void physical_sort(RandomIt first, RandomIt last) {physical_sortRandomIt, std::less(first, last, std::less());
}constexpr int N { 10 };
struct big_item{int key;int dummy_array[32U] {};bool operator(const big_item other) const noexcept{ return key other.key; }
} big_items[N];int main(void) {std::random_device dev;std::mt19937 gen(dev()); std::uniform_int_distribution distrib(0, N);std::generate(std::begin(big_items), std::end(big_items),[]{return big_item { key: distrib(gen) };});std::puts(before);for(int i {}; i N; i) std::cout big_items[i].key ;endl(std::cout);physical_sort(std::begin(big_items), std::end(big_items));std::puts(after);for(int i {}; i N; i) std::cout big_items[i].key ;endl(std::cout);
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/921313.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!