zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C++实现查找中位数的O(N)算法和Kmin算法

C++算法 实现 查找 中位数
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++程序算法设计的学习有所帮助。