Tôi không nghĩ rằng việc vượt qua mảng hai lần là một vấn đề. Hãy xem xét mã giả sau đây:
minval = array[0]
maxval = array[0]
for i in array:
if i maxval:
maxval = i
Mặc dù chỉ có 1 vòng lặp ở đây, nhưng vẫn có 2 kiểm tra. [Thay vì có 2 vòng lặp với 1 lần kiểm tra]. Thực sự điều duy nhất bạn lưu là chi phí của 1 vòng lặp. Nếu các mảng thực sự lớn như bạn nói, thì chi phí đó nhỏ so với tải công việc của vòng lặp thực tế. [Lưu ý rằng tất cả điều này được thực hiện trong C, vì vậy các vòng lặp ít nhiều miễn phí].
EDIT Xin lỗi 4 bạn đã ủng hộ và có niềm tin vào tôi. Bạn chắc chắn có thể tối ưu hóa điều này.
Đây là một số mã fortran có thể được biên dịch thành mô-đun python thông qua f2py
[có thể một Cython
guru có thể đi cùng và so sánh mã này
với phiên bản C được tối ưu hóa ...]:
subroutine minmax1[a,n,amin,amax]
implicit none
!f2py intent[hidden] :: n
!f2py intent[out] :: amin,amax
!f2py intent[in] :: a
integer n
real a[n],amin,amax
integer i
amin = a[1]
amax = a[1]
do i=2, n
if[a[i] > amax]then
amax = a[i]
elseif[a[i]