"""
给定数组a1,a2,a3...an,要求找出数组中的最大值和最小值。假设数组中的值两两各不相同。
"""
class MaxMin:
def __init__(self):
self.max = None
self.min = None
def getMax(self):
return self.max
def getMin(self):
return self.min
def GetmaxAndmin(self, arr):
if arr == None:
print('参数不合法')
return
lens = len(arr)
# 两两分组,把较小的数放到左半部分,较大的数放到右半部分
i = 0
while i < (lens - 1):
if arr[i] > arr[i + 1]:
tmp = arr[i]
arr[i] = arr[i + 1]
arr[i + 1] = tmp
i += 2
# 在各个分组的左半部分找最小值
self.min = arr[0]
i = 2
while i < lens:
if arr[i] < self.min:
self.min = arr[i]
i += 2
# 在各个分组的右半部分找到最大值
self.max = arr[1]
i = 3
while i < lens:
if arr[i] > self.max:
self.max = arr[i]
i += 2
# 如何数组中元素个数是奇数个,最后一个元素被分为一组,需要特殊处理
if lens % 2 == 1:
if self.max < arr[lens - 1]:
self.max = arr[lens - 1]
if self.min > arr[lens - 1]:
self.min = arr[lens - 1]
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()))
运行结果如下:
max=40
min=1
本文介绍了一种高效的算法,用于从给定数组中找出最大值和最小值。该算法首先将数组两两分组,然后通过比较每组内的两个元素,将较小的元素放到左半部分,较大的元素放到右半部分。接着,在各分组的左半部分寻找最小值,在右半部分寻找最大值。最后,如果数组元素个数为奇数,则单独处理最后一个元素。
2664

被折叠的 条评论
为什么被折叠?



