当前位置: 首页 > news >正文

这几天都是发癫写的

#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
#include <cmath> // for sqrt

// Gen-Sort 实现(保持不变)
void genSort(std::vector<int>& arr) {
if (arr.empty()) return;
int min_val = *std::min_element(arr.begin(), arr.end());
int max_val = *std::max_element(arr.begin(), arr.end());
std::unordered_map<int, int> count_map;
for (int num : arr) count_map[num]++;
arr.clear();
for (int i = min_val; i <= max_val; ++i) {
if (count_map.find(i) != count_map.end()) {
arr.insert(arr.end(), count_map[i], i);
}
}
}

// 自适应分块 Merge-Plus
void adaptiveMergePlus(std::vector<int>& arr) {
if (arr.size() <= 1) return;

    // 1. 动态计算分块数量(例如分块数 k = sqrt(n))
size_t n = arr.size();
size_t k = static_cast<size_t>(std::sqrt(n));
size_t block_size = n / k + (n % k != 0);

    // 2. 分块并用 Gen-Sort 排序
std::vector<std::vector<int>> blocks(k);
for (size_t i = 0; i < k; ++i) {
size_t start = i * block_size;
size_t end = std::min(start + block_size, n);
blocks[i] = std::vector<int>(arr.begin() + start, arr.begin() + end);
genSort(blocks[i]); // 对每个分块排序
}

    // 3. 多路归并(使用优先队列)
arr.clear();
using BlockIterator = std::vector<int>::const_iterator;
using QueueItem = std::pair<BlockIterator, BlockIterator>;
auto cmp = [](const QueueItem& a, const QueueItem& b) {
return *a.first > *b.first; // 最小堆
};
std::priority_queue<QueueItem, std::vector<QueueItem>, decltype(cmp)> pq(cmp);

    // 初始化堆
for (const auto& block : blocks) {
if (!block.empty()) {
pq.push({block.begin(), block.end()});
}
}

    // 归并
while (!pq.empty()) {
auto [begin, end] = pq.top();
pq.pop();
arr.push_back(*begin);
if (++begin != end) {
pq.push({begin, end});
}
}
}

int main() {
std::vector<int> arr = {5, 3, 8, 1, 2, 7, 4, 10, 3, 5, 6, 9, 0, 11};

    std::cout << "Original array: ";
for (int num : arr) std::cout << num << " ";
std::cout << "\n";

    adaptiveMergePlus(arr);

    std::cout << "Sorted array: ";
for (int num : arr) std::cout << num << " ";
std::cout << "\n";

    return 0;
}使用了AI 不然一天打两千行代码我手能不要了

http://www.lryc.cn/news/598827.html

相关文章:

  • 计算机视觉技术剖析:轮廓检测、模板匹配及特征点匹配
  • 背包DP之分组背包
  • 读书笔记(王阳明心学)
  • 高可用架构模式——异地多活设计步骤
  • 物流仓储自动化升级:Modbus TCP与DeviceNet的协议融合实践
  • C++实战:人脸识别7大核心实例
  • 【数据结构初阶】--二叉树(二)
  • FreeSWITCH 简单图形化界面45 - 收集打包的一些TTS
  • 内网IM:BeeWorks私有化部署的安全通讯解决方案
  • 安全插座项目规划书
  • 【VSCode】复制到下一行快捷键
  • 2024年ASOC SCI2区TOP,基于强化学习教与学优化算法RLPS-TLBO+风电场布局优化,深度解析+性能实测
  • Go基础教程 从零到英雄:30分钟掌握Go语言核心精髓
  • Go语言管道Channel通信教程
  • 黑马点评系列问题之p44实战篇商户查询缓存 jmeter如何整
  • 2025.7.24 01背包与动态规划复习总结
  • 【Oracle】Oracle权限迷宫破解指南:2步定位视图依赖与授权关系
  • MySQL常见命令
  • 多线程 Reactor 模式
  • hcip思维导图(1)
  • GaussDB 数据库架构师(八) 等待事件概述-1
  • 阿里云ECS坑之dnf-makecache系统软件更新检测服务
  • 解决postgresql连接数不足
  • 五分钟了解Java 中的锁
  • SQL基础⑪ | 约束
  • JavaScript 中的 structuredClone() 如何彻底改变你的对象复制方式
  • Android LiveData 全面解析:原理、使用与最佳实践
  • Windows 10 远程桌面(RDP)防暴力破解脚本
  • Android 与 Windows 文件路径的设计差异
  • Android Camera createCaptureSession