算法8:一个整数数组里怎么同时找最大和最小的数,尽量优化比较次数

    xiaoxiao2021-03-25  163

    解题思路

    n个大小的整数数组 思路1:遍历整个数组分别得出最大值和最小值,比较次数为2n 思路2:取两个数进行比较,大的与当前最大值比较,小的与当前最小值比较,则没两个数要比较3次,比较次数为1.5n

    c++代码

    //取两个数进行比较,小的数跟当前最小值比较,大的数跟当前最大值比较 void GetMinMax(int* buffer,int& bufferLen,int& max, int& min) { if(buffer == NULL || bufferLen <= 0) { cout<<"buffer is empty or wrong"<<endl; return; } int i = 0; int j = bufferLen -1; min = buffer[0]; max = buffer[0]; while(i <= j) { if(buffer[i] < buffer[j]) { if(buffer[i] < min) { min = buffer[i]; } if(buffer[j] > max) { max = buffer[j]; } } else { if(buffer[j] < min) { min = buffer[j]; } if(buffer[i] > max) { max = buffer[i]; } } i++; j--; } }

    测试代码

    int _tmain(int argc, _TCHAR* argv[]) { int buffer[10] = {9,6,1,7,10,2,4,5,8,-1}; int bufferLength = 10; int min = 0; int max = 0; GetMinMax(buffer,bufferLength,max,min); cout<<"min = "<<min<<" max = "<<max<<endl; return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-1875.html

    最新回复(0)