C++实现查找中位数的O(N)算法和Kmin算法
本文实例讲述了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++程序算法设计的学习有所帮助。