2011-08-20 77 views

Trả lời

6

Chỉ cần lặp qua mảng theo kiểu tuyến tính. Giữ một biến cho giá trị min và một cho giá trị tối đa. Khởi tạo cả hai cho giá trị đầu tiên trong mảng. Sau đó, đối với từng phần tử, hãy cập nhật giá trị tối thiểu hoặc tối đa nếu phần tử đó nhỏ hơn hoặc lớn hơn giá trị tối thiểu hoặc tối đa tương ứng.

minval := a[0]; 
maxval := a[0]; 
for i := 1 to Count-1 do 
begin 
    if a[i]<minval then 
    minval := a[i] 
    else if a[i]>maxval then 
    maxval := a[i]; 
end; 

Rõ ràng mã này giả định Đếm> 0.

Lưu ý rằng bạn có thể sử dụng đồng đều các thói quen MinValue và MaxValue từ đơn vị Math.

+0

Tôi nghĩ chúng tôi đã nhập cùng một lúc! Tôi thích khởi tạo của bạn tốt hơn, nhưng tôi thích cấu trúc for..in nhỏ gọn hơn, mặc dù nó phụ thuộc vào phiên bản của Delphi mà anh ta có cho dù nó được hỗ trợ hay không. –

+3

+1 Đối với 'MinValue' và' MaxValue'. Ngoài ra còn có ['MinIntValue'] (http://docwiki.embarcadero.com/VCL/en/Math.MinIntValue) và [' MaxIntValue'] (http://docwiki.embarcadero.com/VCL/en/Math. MaxIntValue). – NGLN

+0

@ngln cảm ơn vì điều đó, bạn đúng, tất nhiên, tôi thường làm việc với dữ liệu dấu chấm động. –

4

Lặp lại qua mảng so với min và max được tìm thấy trước đó.

Đây là đoạn mã. Sau khi làm rõ, tôi đã chỉnh sửa mã để sử dụng Int64.

Min := High(Int64); 
Max := Low(Int64); 
for ThisNumber in MyArray do 
begin 
    if ThisNumber < Min then 
    begin 
    Min := ThisNumber; 
    end 
    if ThisNumber > Max then 
    begin 
    Max := ThisNumber; 
    end; 
end; 

Thật thú vị khi lưu ý rằng MaxIntValue trong Math.pas được thực hiện như:

function MaxIntValue(const Data: array of Integer): Integer; 
var 
    I: Integer; 
begin 
    Result := Data[Low(Data)]; 
    for I := Low(Data) + 1 to High(Data) do 
    if Result < Data[I] then 
     Result := Data[I]; 
end; 

thi này, tương tự như câu trả lời của David, sử dụng giá trị mảng đầu tiên là giá trị ban đầu. Điều này giả định rằng mảng có ít nhất một phần tử. Cũng lưu ý rằng vòng lặp có thể bắt đầu ở mức Thấp (Dữ liệu) + 1 và lưu một so sánh không cần thiết. Đối với dữ liệu bạn đã mô tả, với 100 phần tử trong mỗi mảng, bạn sẽ nhận được cải thiện tốc độ 1%, tốt nhất.

Nếu hiệu suất không quan trọng thì MinIntValue và MaxIntValue sẽ súc tích hơn. Nếu bạn cuộn của riêng bạn, sau đó bạn chỉ lặp qua mảng một lần thay vì hai lần.

+0

Cảm ơn David, về định dạng. –

+0

không có mảng của tôi là int64 .. –

+0

Mã đã thay đổi thành Int64 ngay bây giờ. –

Các vấn đề liên quan