簡體   English   中英

在數組中查找最小值和最大值時使用哪種方法?

[英]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];
}

UPD

我很驚訝地看到人們認為方法1不適用於負數。 是因為在第一次迭代時,當檢查i==0時,我們總是使用第一個元素初始化minmax 如果有疑問,我建議在負序上運行此代碼 - 它有效(我已經檢查過)

第二種和第三種方法是更好的方法。 我個人覺得第三個解決方案比第二個解決方案更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM