編程之美 尋找數組中的最大值和最小值

來源:互聯網
上載者:User

尋找一個數組裡的最大值和最小值

法一:

       分別遍曆一遍,次數O(2*N);

法二:

        根據書上的講述,

 

法三:

       主要在法二的基礎上改進,法二改變了原數組,法三主要是不改變原數組,定義兩個變數MAX和MIN,分別儲存最大值和最小值。

法四:

       分治法,這是重點。

[cpp]
view plaincopyprint?
  1. typedef struct  
  2. {  
  3.   int MAX;  
  4.   int MIN;  
  5. } iValueType;  
  6.   
  7. iValueType search(int* arr,int m,int n)  
  8. {  
  9.    if(n-m<=1)   
  10.    {  
  11.      iValueType tmp;  
  12.      if(arr[n]>arr[m])  
  13.      {  
  14.          tmp.MAX=arr[n];  
  15.          tmp.MIN=arr[m];       
  16.      }  
  17.      else  
  18.      {  
  19.          tmp.MAX=arr[m];  
  20.          tmp.MIN=arr[n];  
  21.      }  
  22.      return tmp;  
  23.    }  
  24.   
  25.  iValueType leftValue=search(arr,m,m+(n-m)/2);  
  26.  iValueType rightValue=search(arr,m+(n-m)/2+1,n);  
  27.    
  28.  iValueType tmp;  
  29.  if(leftValue.MAX>rightValue.MAX)  
  30.      tmp.MAX=leftValue.MAX;  
  31.  else  
  32.      tmp.MAX=rightValue.MAX;  
  33.   
  34.   
  35.  if(leftValue.MIN>rightValue.MIN)  
  36.      tmp.MIN=rightValue.MIN;  
  37.  else  
  38.      tmp.MIN=leftValue.MIN;  
  39.     
  40. return tmp;  
  41. }  

複雜度 1.5N

推導見書上:

      

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.