給定一整形數組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: }