码迷,mamicode.com
首页 > 其他好文 > 详细

find zhe median

时间:2015-07-29 16:02:42      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

题目描述:

Median Value
The Median is the "middle" of a sorted list of numbers.

How to Find the Median Value

To find the Median, place the numbers in value order and find the middle.
Example: find the Median of 12, 3 and 5
Put them in order:
3, 5, 12
The middle is 5, so the median is 5.
// 经典折半查找
int parition(int* pArr, int begin, int end)
{
	if (pArr == NULL || begin>end)
	{
		return -1;
	}
	
	//showData(pArr, 7);

	int temp = pArr[begin];

	while (end>begin)
	{  // ==
		while (end>begin && pArr[end] >= temp)
		{
			end--;
		}
		pArr[begin] = pArr[end];

		while (end>begin && pArr[begin] <= temp)
		{
			begin++;
		}
		pArr[end] = pArr[begin];
	}

	pArr[begin] = temp;
	
	cout << "mid=" << begin << ":" << temp<< endl;
	showData(pArr, 7);
	return begin;
}
/************************************************************************/
//   Find the Median
//   {4,5,1,6,2,7,3,8}
//  
//  分析:
//   中位数位置就是 i=len/2
//   
//   实现方式
//   1 递归 
//   
//  @input:mid=len/2 
// 
/************************************************************************/
int GetMedianNumber(int* pArr, int begin,int end,int mid)
{  

	int iPivit = parition(pArr, begin, end);
	//符合条件: 中位数位置就是 i=len/3
	if (iPivit == mid)
	{
		cout << "Find the Median..." << endl;
		return iPivit;
	}
	else if(mid> iPivit)
	{
		GetMedianNumber(pArr, iPivit + 1, end,mid);
	}
	else
	{
		GetMedianNumber(pArr, begin, iPivit-1, mid);
	}
	
}
//非递归方式
int GetMedianNumber(int* pArr, int begin, int end)
{   
	
	if (end%2 !=0)
	{
		return -1;
	}

	int mid = end/ 2; //中位数的位置
	int iPivit = 0;

	while (end >=begin)
	{
		iPivit = parition(pArr, begin, end);
	   //符合条件: 中位数位置就是 i=len/2
		if (iPivit == mid)
		{
			cout << "Find the Median..."<<endl;
			return iPivit;
		}
		else if (mid > iPivit)
		{
			
			begin = iPivit + 1;
			parition(pArr, begin, end);
		}
		else
		{
			end = iPivit - 1;
			parition(pArr, begin, end);
		}
	}
	return 0;
}

void test()
{  /**
	int aray[8] = { 2,4, 3, 6,3 ,2,5,5};
	//2 0010
	int num1 = 0;
	int num2 = 0;
	FindNumsAppearOnce(aray, 8, num1, num2);
	cout << "11=" << num1 << "22=" << num2 << endl;
	**/
	int aray[7] = { 0, 1, 2, 4, 6, 5, 3 };
	//int mid = GetMedianNumber(aray,0,6,3);
	int mid = GetMedianNumber(aray, 0, 6);
	cout << "mid============" << mid << ":" << aray[mid];
}


欢迎关注微信账号 进行讨论

技术分享

find zhe median

标签:

原文地址:http://my.oschina.net/woyaoxue/blog/485166

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!