一:題目
試編寫一個函數,以不多余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
符合要求