C++实现查找中位数的O(N)算法和Kmin算法
2023-06-13 09:15:46 时间
本文实例讲述了C++实现查找中位数的O(N)算法和Kmin算法,分享给大家供大家参考。具体方法如下:
利用快速排序的partition操作来完成O(N)时间内的中位数的查找算法如下:
#include<iostream> #include<cassert> #include<algorithm> #include<iterator> usingnamespacestd; intarray[]={1,2,10,8,9,7,5}; constintsize=sizeofarray/sizeof*array; intpartition(int*array,intleft,intright) { if(array==NULL) return-1; intpos=right; right--; while(left<=right) { while(left<pos&&array[left]<=array[pos]) left++; while(right>=0&&array[right]>array[pos]) right--; if(left>=right) break; swap(array[left],array[right]); } swap(array[left],array[pos]); returnleft; } intgetMidIndex(int*array,intsize) { if(array==NULL||size<=0) return-1; intleft=0; intright=size-1; intmidPos=right>>1; intindex=-1; while(index!=midPos) { index=partition(array,left,right); if(index<midPos) { left=index+1; } elseif(index>midPos) { right=index-1; } else { break; } } assert(index==midPos); returnarray[index]; } voidmain() { intvalue=getMidIndex(array,size); cout<<"value:"<<value<<endl; }
寻找kmin算法如下:
intfindKMin(int*array,intsize,intk) { if(array==NULL||size<=0) return-1; intleft=0; intright=size-1; intindex=-1; while(index!=k) { index=partition(array,left,right); if(index<k) { left=index+1; } elseif(index>k) { right=index-1; } else { break; } } assert(index==k); returnarray[index]; }
希望本文所述对大家C++程序算法设计的学习有所帮助。
相关文章
- C++STL初识,概念、六大组件、容器算法迭代器
- 简单易懂的Dinic算法C++实现 含算法解释
- C++从入门到精通(第十篇) :二叉搜索树
- C语言和C++的区别和联系
- C++基本概念_c语言 c++区别
- C++不知算法系列之排序从玩转冒泡算法开始
- C++数学与算法系列之排列和组合
- c++的链表-链表入门(C++)
- C/C++ 实现提升访问令牌权限
- C++ 中文周刊 第93期
- 从C和C++内存管理来谈谈JVM的垃圾回收算法设计-下
- C++ 指针、引用的梳理
- 查找算法的实现(C/C++实现)详解编程语言
- C++queue容器学习(详解)编程语言
- C++ find_first_of(STL find_first_of)查找算法详解
- C++ find_end(STL find_end)算法详解
- C++ partition_point(STL partition_point)算法使用详解
- 冒泡排序(C++)算法详解
- 基于一致性hash算法C++语言的实现详解
- C++算法之海量数据处理方法的总结分析
- C++拷贝构造函数(深拷贝与浅拷贝)详解
- 利用C++的基本算法实现十个数排序
- c++实现MD5算法实现代码
- C++火车入轨算法的实现代码
- C++实现汉诺塔算法经典实例
- 采用C++实现区间图着色问题(贪心算法)实例详解
- VC++实现选择排序算法简单示例
- C++实现inlinehook的原理及应用实例
- C++堆排序算法的实现方法
- C++实现一维向量旋转算法
- C++实现N个骰子的点数算法