算法导论 第9章 中位数和顺序统计量 C++实现

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值