算法习题---线性表之时间复杂度分析

一:题目

试编写一个函数,以不多余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

符合要求

 

posted @ 2018-08-31 19:58  山上有风景  阅读(1947)  评论(0编辑  收藏  举报