算法習題---線性表之時間復雜度分析


一:題目

試編寫一個函數,以不多余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

符合要求

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM