使用最少比較次數在C語言中查詢陣列的最大值和最小值


給定一個整數陣列,任務是找到陣列中最小和最大的元素,並使用最少的比較次數。

輸入 

Arr[] = { 1,2,4,5,-3,91 }

輸出 

Maximum element : 91 Minimum Element : -3

解釋 − 為了最大限度地減少比較次數,我們將最大值和最小值初始化為Arr[0]。從第二個元素開始,將每個值與min和max進行比較,並相應地更新。

輸入 

Arr[] = { 10,20,21,31,18,11 }

輸出 

Maximum element : 31 Minimum Element : 10

解釋 − 同樣,為了最大限度地減少比較次數,我們將最大值和最小值初始化為Arr[0]。從第二個元素開始,將每個值與min和max進行比較,並相應地更新。

下面程式中使用的方法如下:

  • 我們取一個整數陣列,其數字為Arr[]

  • 函式getresult( int arr[],int n)用於查詢陣列中最大和最小的元素,並使用最少的比較次數。

  • 如果只有一個元素,我們將使用arr[0]初始化變數max和min。

  • 對於多個元素,我們將使用arr[1]初始化max,使用arr[0]初始化min。

  • 在for迴圈內部,從第三個元素(i=2)遍歷到最後一個元素。

  • 現在,我們將每個值(arr[i])與min和max進行比較。如果它小於min,則使用arr[i]更新min。如果它大於max,則使用arr[i]更新max。

  • 最後,列印儲存在max和min變數中的結果。

示例

 線上演示

#include <stdio.h>
#include <math.h>
int getresult(int arr[], int n){
   int min=0,max=0;
   /*If there is only one element then return it as min and max both*/
   if (n == 1)
      { min=max=arr[0]; }
   /* If there are more than one elements, then initialize min and max*/
   if (arr[0] > arr[1]){
      max = arr[0];
      min = arr[1];
   }
   else{
      max = arr[1];
      min = arr[0];
   }
   for (int i = 2; i<n; i++){
      if (arr[i] > max)
         max = arr[i];
      else if (arr[i] < min)
         min = arr[i];
   }
   printf(" Minimum element: %d", min);
   printf(" Maximum element: %d", max);
}
/* Driver program to test above function */
int main(){
   int arr[] = {200, 191, 112, -11, 330, 60};
   int n = 6;
   getresult (arr, n);
}

輸出

如果執行以上程式碼,將生成以下輸出:

Minimum element: -11 Maximum element: 330

更新於:2020年8月17日

12K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告