編程之美--尋找數組中的最大值和最小值

1、題目:對於一個由N個整數組成的數組,需要比較多少次才能把最大值和最小值找出來?

例如,數組{5,6,8,3,7,9},其中Max=9, Min=3.

解法一:

掃描一遍數組,分別找出最大和最小值,需要比較2N次。

解法二:

一般情況下,最大和最小的數不會是同一個,首先按順序將數組中相鄰的兩個數分在同一組(只是概念上的分組),接着比較同一組中奇數位數字和偶數位數字,將較大的數放在偶數位上,將較小的數放在奇數位上。經過N/2次比較後,較大的數放到了偶數位上,較小的數放到了奇數位上。

解法三:

分治法,分別求出前後N/2個數的Min和Max,然後取較小的Min、Max即可。(只需較大的數和較大的數比較,較小的數和較小的數比較。兩次就可以了)

(max, min)Search(arr, b, e)
{
	if(e-b <= 1)
	{
		if(arr[b] < arr[e])
			return (arr[e], arr[b]);
		else
			return (arr[b], arr[e]);
	}
	(maxL, minL) = Search(arr, b, b+(e-b)/2);
	(maxR, minR) = Search(arr, b+(e-b)/2+1, e);

	if(maxL > maxR)
		maxV= maxL;
	else
		maxV= maxR;

	if(minL < minR)
		minV= minL;
	else
		minV= minR;

	return (maxV, minV);
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章