寻找数组中的最大值和最小值
生活随笔
收集整理的這篇文章主要介紹了
寻找数组中的最大值和最小值
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
解法1、
? ? ? 我們可以吧數(shù)字中的最大值和最小值看成兩個獨(dú)立的問題分別求出數(shù)組中的最大值和最小值。
直接的方法就是掃描數(shù)字,找到最大數(shù)以及最小數(shù)。
<span style="font-size:18px;">bool MaxMin(std::vector<T> array, T* max, T* min) {if (array.size() < 1) {return false;}*max = array[0];*min = array[0];size_t array_size = array.size();for (int i = 1; i < array_size; ++i) {if (array[i] > *max) {*max = array[i];} else if (array[i] < *min) {*min = array[i];}}return true; } </span>解法2、
數(shù)組中的一對一對的數(shù)相互比較,比較中較大的一個和max比較,較小的和min比較,總計(jì)有N/2對數(shù),分別和max和min進(jìn)行一次比較,共計(jì)3N/2次比較。
template<typename T> bool MaxMin_1(std::vector<T> array, T* max, T* min) {if (array.size() < 1) {return false;}*max = array[0];*min = array[0];int index = 1;int array_size = array.size();while(index < array_size && index +1 <array_size) {if (array[index] >= array[index + 1]) {if (array[index] > *max) {*max = array[index];}if (array[index + 1] < *min) {*min = array[index + 1];}} else {if (array[index + 1] > *max) {*max = array[index + 1];}if (array[index] < *min) {*min = array[index];}}index += 2;} if (index < array.size()) {if (array[index] > *max) {*max = array[index];}if (array[index] < *min) {*min = array[index];}}return true; }
3、 分治法
template<typename T> bool MaxMin_2(std::vector<T> array, int start, int end, T* max, T* min) {if (end - start > 1) {MaxMin_2(array, start, (start + end) / 2, max, min);MaxMin_2(array, (start + end) / 2 + 1, end, max, min);} else {if (array[end] > array[start]) {if (array[end] > *max) {*max = array[end];}if (array[start] < *min) {*min = array[start];}} else {if (array[start] > *max) {*max = array[start];}if (array[end] < *min) {*min = array[end];}}} } template<typename T> bool MaxMin_3(std::vector<T> array, int start, int end, T* max, T* min) {if (end > start) {MaxMin_2(array, start, (start + end) / 2, max, min);MaxMin_2(array, (start + end) / 2 + 1, end, max, min);} else {if (array[start] > *max) {*max = array[start];}if (array[start] < *min) {*min = array[start];}} }
總結(jié)
以上是生活随笔為你收集整理的寻找数组中的最大值和最小值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。