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

符合要求

 

相关文章:

  • 2022-02-10
  • 2021-07-27
  • 2021-11-25
  • 2021-06-18
  • 2021-09-22
  • 2021-06-09
  • 2021-08-10
  • 2021-10-02
猜你喜欢
  • 2021-08-13
  • 2021-04-27
  • 2021-06-06
  • 2022-12-23
  • 2021-12-09
  • 2022-12-23
  • 2021-11-29
相关资源
相似解决方案