尋找陣列中最大值和最小值

2021-06-03 20:01:21 字數 3543 閱讀 4527

最簡單的方法就是n中的每個數分別和max,min比較,看似2n次比較,其實大於max的就不必和min比較,小於min的也不必和max比較,因此比較的次數不足2n次,程式如下:

bool maxmin(std::vectorarray, t* max, t* min) 

*max = array[0];

*min = array[0];

size_t array_size = array.size();

for (int i = 1; i < array_size; ++i) else if (array[i] < *min)

} return true;

}

其次方法是陣列中的一對一對的數相互比較,比較中較大的乙個和max比較,較小的和min比較,總計有n/2對數,分別和max和min進行一次比較,共計3n/2次比較,程式**如下:

templatebool maxmin_1(std::vectorarray, t* max, t* min) 

*max = array[0];

*min = array[0];

int index = 1;

int array_size = array.size();

while(index < array_size && index +1 = array[index + 1])

if (array[index + 1] < *min)

} else

if (array[index] < *min)

}index += 2;

} if (index < array.size())

if (array[index] < *min)

} return true;

}

最後一種方法是分治法,比較次數也是3n/2,程式如下:

templatebool maxmin_2(std::vectorarray, int start, int end, t* max, t* min)  else 

if (array[start] < *min)

} else

if (array[end] < *min) }}}

templatebool maxmin_3(std::vectorarray, int start, int end, t* max, t* min) else

if (array[start] < *min)

}}

為了測試效能,完成比較程式如下:

#include #include #include #include templatebool maxmin(std::vectorarray, t* max, t* min) 

*max = array[0];

*min = array[0];

size_t array_size = array.size();

for (int i = 1; i < array_size; ++i) else if (array[i] < *min)

} return true;

}templatebool maxmin_1(std::vectorarray, t* max, t* min)

*max = array[0];

*min = array[0];

int index = 1;

int array_size = array.size();

while(index < array_size && index +1 = array[index + 1])

if (array[index + 1] < *min)

} else

if (array[index] < *min)

}index += 2;

} if (index < array.size())

if (array[index] < *min)

} return true;

}templatebool maxmin_2(std::vectorarray, int start, int end, t* max, t* min) else

if (array[start] < *min)

} else

if (array[end] < *min) }}}

templatebool maxmin_3(std::vectorarray, int start, int end, t* max, t* min) else

if (array[start] < *min)

}}int gettime()

int main(int argc, char** argv)

printf("\n");

int max;

int min;

int start;

start = gettime();

maxmin(array, &max, &min);

printf("time elapse:%d\n", gettime() - start);

printf("max:%d min:%d\n", max, min);

start = gettime();

maxmin_1(array, &max, &min);

printf("time elapse:%d\n", gettime() - start);

printf("max:%d min:%d\n", max, min);

start = gettime();

maxmin_2(array, 0, array.size() - 1, &max, &min);

printf("time elapse:%d\n", gettime() - start);

printf("max:%d min:%d\n", max, min);

start = gettime();

maxmin_3(array, 0, array.size() - 1, &max, &min);

printf("time elapse:%d\n", gettime() - start);

printf("max:%d min:%d\n", max, min);

}

執行結果:

./a.out 

time elapse:187

max:2147469841 min:100669

time elapse:216

max:2147469841 min:100669

time elapse:86513

max:2147469841 min:100669

time elapse:82481

max:2147469841 min:100669

結論:最簡單的方法效率最高,分治法由於迭代效率非常差,這是我想到了分治法的歸併排序,估計效能也不會好,改天比較一下。

程式設計之美 2.10

C 尋找陣列最大值和最小值

c 裡面有好多自帶函式可以直接用,比如尋找陣列中的最大最小值其實是有函式的,如下 include using namespace std include int main cout min element p,p n max element p,p n endl return 0 需要用標頭檔案,m...

js獲取陣列中最大值,最小值

es6拓展運算子.1 math.max arr 最大值 2 math.min arr 最小值 遍歷方法 1 var arr 12,14,34,566,34,98,77 2var max arr 0 3for var i 0 i 7 8 console.log max 最大值9 10for var i...

尋找陣列中的最大值和最小值

問題描述 給出乙個陣列,包含n個整數,那麼需要比較多少次找到最大值和最小值 注意 要想得到最大值和最小值,遍歷一遍陣列是不可避免的。我們能減少的就是減少比較次數來提高效率 方法一 遍歷一遍陣列,同時得到最大值和最小值 具體是,定義乙個max 和 min,每遍歷乙個數,就分別和max 和 min比較一...