一:题目
试编写一个函数,以不多余3n/2的平均比较次数,在一个有n个整数的顺序表A中找出最大和最小值
二:思路
思路和正常的比较方式一样,主要在于我们对时间复杂度的分析
三:代码实现
void FindMaxMin(int A[], int n, int *max, int *min) { *max = *min = A[1]; //A[0]为顺序表头结点 for (int i = 2; i <= n;i++) { if (A[i] > *max) *max = A[i]; else if (A[i] < *min) *min = A[i]; } }
四:算法时间复杂度分析
(一)最坏情况:顺序表小到大,全部比较两次,数据比较次数2(n-1)
(二)最好情况:顺序表大到小,只比较一次,数据比较次数n-1
因为数组的有序性是等可能的,所以最好和最坏情况概率相同,都是1/2。
综上所述,数据平均比较次数是:
(2(n-1)+(n-1))/2=3*(n-1)/1