标签:大数 cti 算法 time main 其他 ace log 偶数
1 #include<iostream> 2 #include<ctime> 3 using namespace std; 4 5 int Min(int a, int b) 6 { 7 if (a < b) 8 return a; 9 else 10 return b; 11 } 12 13 int Max(int a, int b) 14 { 15 if (a > b) 16 return a; 17 else return b; 18 } 19 20 void Maximum_minimum(int a[], int n, int &max, int &min) 21 { 22 if (n == 1) 23 max = min = a[1]; 24 else 25 { 26 int k; 27 min = Min(a[1], a[2]); 28 max = Max(a[1], a[2]); 29 for (k = 2; k <= n / 2; k++) 30 { 31 if (a[2 * k - 1] < a[2 * k]) 32 { 33 min = Min(a[2 * k - 1], min); 34 max = Max(a[2 * k], max); 35 } 36 else 37 { 38 min = Min(a[2 * k], min); 39 max = Max(a[2 * k - 1], max); 40 } 41 } 42 if (2 * k < n) 43 { 44 min = Min(a[n], min); 45 max = Max(a[n], max); 46 } 47 } 48 49 } 50 51 52 53 void main() 54 { 55 int max, min; 56 srand(time(0)); 57 int a[11]; 58 for (int i = 1; i < 11; i++) 59 a[i] = rand() % 100 + 1; 60 Maximum_minimum(a, 10, max, min); 61 for (int i = 1; i < 11; i++) 62 cout << a[i] << endl; 63 cout << "Max=" << max<<endl; 64 cout << "Min=" << min; 65 }
这个算法的计算次数:
1.当n是偶数,一共是n/2组,每组进行3次比较,但第一组只要一次比较,所以一共需要(3n-4)/2次比较;
2.当n是奇数,一共是(n+1)/2组,每组进行3次比较,但第一组是1次而最好一组是2次,所以一共需要(3n-3)/2次比较。
可以证明这个算法是最优的,证明可在其他书中找到
标签:大数 cti 算法 time main 其他 ace log 偶数
原文地址:http://www.cnblogs.com/zhengzhe/p/6489091.html