[英]Which approach to use when finding min and max value in array?
我想知道在數組中找到最小值和最大值的最佳方法是什么。 我使用兩種方法(我的數組是a
size
):
方法1:
int min = 0, max = 0;
for(int i = 0; i < size; i++)
{
if(a[i] > max || i == 0) max = a[i];
if(a[i] < min || i == 0) min = a[i];
}
方法2:
int min = INT_MAX, max = INT_MIN;
for(int i = 0; i < size; i++)
{
if(a[i] > max) max = a[i];
if(a[i] < min) min = a[i];
}
方法3:
int min = a[0], max = a[0];
for(int i = 1; i < size; i++)
{
if(a[i] > max) max = a[i];
if(a[i] < min) min = a[i];
}
方法2似乎對我的新手眼睛更加優化(我們不必在每次循環迭代時評估i == 0
2次。但是,我擔心使用這些極限值可能會出錯。這在方法中得到了解決3,雖然。這三者中哪個是最優的,為什么?
感謝所有回復!
嘗試去第3個選項。 它更優化,然后您不必處理限制值。
方法1適用於所有情況,因此如果您編寫代碼而不考慮特殊上下文,我會使用它。
方法2取決於變量的類型。 如果將它從int32
更改為int32
,則必須重寫該程序。 無符號類型0
btw是最小值,不能定義特殊常量。
方法3要求序列(數組)不為空,並且不能在沒有額外長度檢查的情況下使用。
我喜歡方法3的這種修改:
// assuming size is of size_t and can't be negative
int min = size ? a[0] : 0;
int max = min;
for(int i = 1; i < size; i++)
{
if(a[i] > max) max = a[i];
if(a[i] < min) min = a[i];
}
我很驚訝地看到人們認為方法1不適用於負數。 這將是因為在第一次迭代時,當檢查i==0
時,我們總是使用第一個元素初始化min
和max
。 如果有疑問,我建議在負序上運行此代碼 - 它有效(我已經檢查過)
第二種和第三種方法是更好的方法。 我個人覺得第三個解決方案比第二個解決方案更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.