#第一种:分组计算 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))
返回结果:
第二种: