的時間複雜度,我此刻的學習算法,並寫了下面的代碼,如果在一個維數組存在一個峯值,其發現。我的問題是我如何知道它的最佳情況或平均情況的時間複雜度?算法
最壞情況下的時間複雜度(如果數組元素被排序)是O(n),但是如果數組沒有排序並且它有10個元素,代碼會運行5個循環來獲得結果,的數組大小,所以任何人都可以告訴我如何用算法表示法來編寫它。
int[] arr = { 1,5,2,7,8,9,4,6,7};
int peak;
int count = 0;
for (int i = 1; i < arr.Length - 1; i++)
{
peak = -1;
if (arr[i - 1] <= arr[i] && arr[i] >= arr[i + 1])
{
peak = arr[i];
i++;
}
else if (arr[i - 1] >= arr[i] && i - 1 == 0)
{
peak = arr[i - 1];
}
else if (arr[i + 1] >= arr[i] && i + 1 == arr.Length - 1)
{
peak = arr[i + 1];
}
if (peak != -1)
listBox1.Items.Add(peak.ToString());
count++;
}
listBox1.Items.Add(count.ToString());
我想爲O(n)仍然是真實的,即使你的排序情況N/2上運行。大哦不關心常量。不是絕對的時間;只有親戚。 – duffymo
如果有10個元素且數組未被排序,則不能說這個算法將運行5個循環。它可以未排序並運行7個循環或3個循環。 – MannfromReno
謝謝,但它是我沒有排序的情況下運行n/2。 –