chapter9.h
#ifndef CHPATER9_H
#define CHAPTER9_H
// clrs chapter 9--medians and order statistics
// by full_speed_turbo
// 20140524
#include<iostream>
#include<vector>
#include<cstdlib>
// 9.2
int random_partition(std::vector<int>& a,int p,int r)
{
int ra=rand()%(r+1-p)+p;
std::swap(a[ra],a[r]);
int x=a[r];
int i=p-1;
for(int j=p;j<r;j++)
if(a[j]<=x)
std::swap(a[++i],a[j]);
std::swap(a[i+1],a[r]);
return i+1;
}
int random_select(std::vector<int>& a,int p,int r,int i)
{
if(p==r)
return a[p];
int q=random_partition(a,p,r);
int k=q-p+1;
if(i==k)
return a[q];
else if(i<k)
return random_select(a,p,q-1,i);
else
return random_select(a,q+1,r,i-k);
}
void simu_min_max(const std::vector<int>& a,
int& min,int& max)
{
int begin_index=1;
if(a.size()%2==1)
{
min=max=a[0];
}
else
{
min=std::min(a[0],a[1]);
max=std::max(a[0],a[1]);
begin_index=2;
}
for(int i=begin_index;i<a.size();i+=2)
{
if(a[i]>a[i+1])
{
max=std::max(max,a[i]);
min=std::min(min,a[i+1]);
}
else
{
max=std::max(max,a[i+1]);
min=std::min(min,a[i]);
}
}
}
#endif
chapter9_test.cpp
//#include<iostream>
#include"chapter9.h"
void main()
{
int array[]={1,2,3,4,5,6,7,8,9,0};
std::vector<int> a(array,
array+sizeof(array)/sizeof(int));
//int rt=random_select(a,0,9,7);
//std::cout<<rt<<std::endl;
int min=0;int max=0;
simu_min_max(a,min,max);
std::cout<<"the min="<<min<<
" ,the max="<<max<<std::endl;
}