從數組中找出最大的和最小的數


給定一整形數組a,要求從中找出最大的數和最小的數,並計算時間復雜度。

實現1:

遍歷數組,每次取數組中一個元素, 分別與當前最大值和最小值進行比較,時間復雜度O(2n)

   1: void search(int a[], size_t n, int &max, int &min)
   2: {
   3:     int i;
   4:     max = min = a[0];
   5:     
   6:     for (i = 1; i < n; ++i) {
   7:         if (a[i] > max)
   8:             max = a[i];
   9:         if (a[i] < min)
  10:             min = a[i];                
  11:     }
  12: }

實現2:

遍歷數組,每次取數組中兩個元素進行比較,然后將大的與當前的最大值進行比較,小的與當前的最小值進行比較,時間復雜度O(3n/2)

   1: void search(int a[], size_t n, int &max, int &min)
   2: {
   3:     int i;
   4:     max = min = a[0];
   5:     
   6:     for (i = 1; i < n/2; ++i) {
   7:         if (a[i*2] > a[i*2+1]) {
   8:             if (a[i*2] > max)
   9:                 max = a[i*2];
  10:             if (a[i*2+1] < min)
  11:                 min = a[i*2+1];        
  12:         } else {
  13:             if (a[i*2+1] > max)
  14:                 max = a[i*2+1];
  15:             if (a[i*2] < min)
  16:                 min = a[i*2];
  17:         }
  18:     }
  19:     
  20:     
  21:     if (n%2 != 0) {
  22:         max = (max >= a[n-1]) ? max : a[n-1];
  23:         min = (min <= a[n-1]) ? min : a[n-1];
  24:     }
  25: }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM