Xin chào làm cách nào để tìm số nhỏ nhất và lớn nhất trong delphi?Cách tìm số nhỏ nhất và lớn nhất trong một mảng?
Giả sử tôi có 10 số khác nhau được lưu trữ trong một mảng:
Làm cách nào để tìm số lớn nhất và số nhỏ nhất trong mảng?
Xin chào làm cách nào để tìm số nhỏ nhất và lớn nhất trong delphi?Cách tìm số nhỏ nhất và lớn nhất trong một mảng?
Giả sử tôi có 10 số khác nhau được lưu trữ trong một mảng:
Làm cách nào để tìm số lớn nhất và số nhỏ nhất trong mảng?
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.
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.
Cảm ơn David, về định dạng. –
không có mảng của tôi là int64 .. –
Mã đã thay đổi thành Int64 ngay bây giờ. –
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. –
+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
@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. –