1. 程式人生 > >設計一個演算法從數 A[1:n] 中同時找出最大元素和最小元素,只需要不超過 1.5n-2 次比較。

設計一個演算法從數 A[1:n] 中同時找出最大元素和最小元素,只需要不超過 1.5n-2 次比較。

題目:設計一個演算法從數A[1:n]中同時找出最大元素和最小元素,只需要不超過1.5n-2次比較。

#include <stdio.h>
#define MIN -1
#define MAX 65535

void find_max_min( int num[], int len )
{
    int i, j;
    int max = MIN;
    int min = MAX;
    int tmax, tmin;
    int count = 0; /*用來統計比較次數*/

    i   = 0;
    j   = len - 1;
    while ( i <= j )
    {
        if ( num[i] < num[j] )
        {
            tmax    = num[j];
            tmin    = num[i];
            count++;
        } else {
            tmax    = num[i];
            tmin    = num[j];
            count++;
        }

        if ( min > tmin )
            min = tmin;
        if ( max < tmax )
            max = tmax;
        count += 2; /*上面的兩次比較*/
        i++;
        j--;
    }
    printf( "The max number is: %d.\n", max );
    printf( "The min number is: %d.\n", min );
    printf( "Compare number is: %d.\n", count );
}

int main()
{
    int num[10] = { 2, 4, 5, 6, 8, 3, 7, 1, 9, 10 };
    find_max_min( num, 10 );
    return(0);
}

參考連結: