#第一种:分组计算
class MaxMin():
def __init__(self):
self.max = None
self.min = None
def getMax(self):
return self.max
def getMin(self):
return self.min
def _update_value(self, value, current_value, is_max):
"""
辅助方法,用于更新最大或最小值。
参数:
value (int/float): 待比较的值。
current_value (int/float): 当前的最大或最小值。
is_max (bool): 如果为True,表示更新最大值;如果为False,表示更新最小值。
返回:
int/float: 更新后的最大或最小值。
"""
if is_max:
return max(value, current_value)
return min(value, current_value)
def GetmaxAndMin(self, arr):
if arr is None:
print("参数不合法!")
return
self.max = arr[0]
self.min = arr[0]
# 两两一组进行比较交换
for i in range(0, len(arr) - 1, 2):
if arr[i] > arr[i + 1]:
arr[i], arr[i + 1] = arr[i + 1], arr[i]
# 更新最小值
for i in range(0, len(arr), 2):
self.min = self._update_value(arr[i], self.min, False)
# 更新最大值
for i in range(1, len(arr), 2):
self.max = self._update_value(arr[i], self.max, True)
# 处理列表长度为奇数的情况
if len(arr) % 2 == 1:
self.min = self._update_value(arr[-1], self.min, False)
self.max = self._update_value(arr[-1], self.max, True)
if __name__ == "__main__":
array = [7, 3, 19, 40, 4, 7, 1]
m = MaxMin()
m.GetmaxAndMin(array)
print("max=" + str(m.getMax()))
print("min=" + str(m.getMin()))
# 第二种:选择最大最小元素
def selectMaxMin(a,low,high):
if high-low<=1:
max_=max(a[high],a[low])
min_=min(a[high],a[low])
return max_,min_
max_L,min_L=selectMaxMin(a,low,low+(high-low)//2)
max_R,min_R=selectMaxMin(a,low+(high-low)//2+1,high)
return max(max_L,max_R),min(min_L,min_R)
print(selectMaxMin([1,3,-1,4,9,5,2],0,6))
返回结果:
第二种: