zoukankan      html  css  js  c++  java
  • 算法习题---线性表之时间复杂度分析

    一:题目

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

    符合要求

  • 相关阅读:
    Scanner类
    BufferedReader类
    打印类
    管道流
    内存操作流
    转换流——OutputStreamWriter类与InputStreamReader类
    Java字节流与字符流基本操作
    RandomAccessFile类
    File类
    Timer类和TimerTask类
  • 原文地址:https://www.cnblogs.com/ssyfj/p/9567967.html
Copyright © 2011-2022 走看看