
找第k小|C语言实现
发布日期:2021-05-07 06:45:58
浏览次数:19
分类:精选文章
本文共 1532 字,大约阅读时间需要 5 分钟。
#include#include #include #include #include #include #include using namespace std; int select_kth_smallest(vector q, size_t k); int choose_mid(vector &q, int left, int right); int selection(vector v); void print_vector(vector v); int main() { srand(time(NULL)); int x; int k = 1; vector v; for(int i = 0; i < 10; i++) { x = rand() % 100; v.push_back(x); } print_vector(v); k = select_kth_smallest(v, 4); cout << k << endl; sort(v.begin(), v.end()); print_vector(v); return 0; } void print_vector(vector v) { for(vector ::iterator it = v.begin(); it != v.end(); it++) cout << *it << " "; } int select_kth_smallest(vector q, size_t k) { int bot = 0, top = q.size(); while(bot < top) { int left = bot, right = bot, i; int index = choose_mid(q, bot, top); while(right < top) { if(q[right] < index) { int temp = q[left]; q[left] = q[right]; q[right] = temp; left++; } if(q[right] == index) { i = right; } right++; } q[i] = q[left]; q[left] = index; if(left + 1 < k) { bot = left + 1; } else if(left + 1 > k) { top = left; } else { return index; } } return -1; } int choose_mid(vector &q, int left, int right) { vector v; while(left + 5 < right) { int mid = selection(q, left, right - left + 1); v.push_back(mid); left += 5; } mid = selection(q, left, right); v.push_back(mid); return selection(v); } int selection(vector v) { int size = v.size(); for(int a = 1; a < size; a++) { int b = a; int temp = v[b]; while(b < 0 && temp > v[0]) { b--; temp = v[b]; } return temp; } }
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月28日 14时57分57秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
kubernetes1.5.2--部署监控服务
2025-04-03
kubernetes1.5.2集群部署过程--安全模式
2025-04-03
kubernetes1.5.2集群部署过程--非安全模式
2025-04-03
Kubernetes下容器化应用部署实战
2025-04-03
Kubernetes中间件容器化工具Operator详解
2025-04-03
Kubernetes健康检查与探测机制详解
2025-04-03
Kubernetes入门实验:namespace
2025-04-03
Kubernetes入门:构建和管理容器化应用的强大工具
2025-04-03
Kubernetes包管理工具Helm详解
2025-04-03
Kubernetes单master节点高可用集群安装
2025-04-03
Kubernetes原理详解
2025-04-03
Kubernetes原生的CICD工具Tekton详解
2025-04-03
Kubernetes多master节点高可用集群安装
2025-04-03
Kubernetes存储之Persistent Volumes简介
2025-04-03
Kubernetes学习总结(11)—— Kubernetes Pod 到底是什么?
2025-04-03
Kubernetes学习总结(12)—— 学习 kubernetes 的10个技巧或建议
2025-04-03
Kubernetes学习总结(13)—— Kubernetes 各个组件的概念
2025-04-03
Kubernetes学习总结(14)—— Kubernetes 实用命令总结
2025-04-03