- 最好情況時間複雜度
- 最壞情況時間複雜度
- 平均情況時間複雜度
// n 表示數組 array 的長度
int find(int[] array, int n, int x) {
int i = 0;
int pos = -1;
for (; i < n; ++i) {
if (array[i] == x) {
pos = i;
break;
}
}
return pos;
}
因爲,要查找的變量 x 可能出現在數組的任意位置。如果數組中第一個元素正好是要查找的變量 x,那就不需要繼續遍歷剩下的 n-1 個數據了,那時間複雜度就是 O(1)。但如果數組中不存在變量 x,那我們就需要把整個數組都遍歷一遍,時間複雜度就成了 O(n)。所以,不同的情況下,這段代碼的時間複雜度是不一樣的。
最好和和最壞都是極端情況,出現的概率不大
所以要分析平均情況的複雜度
- 均攤時間複雜度
算法穩定性
冒泡排序就是把小的元素往前調或者把大的元素往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。
所以,如果兩個元素相等,是不會再交換的;如果兩個相等的元素沒有相鄰,那麼即使通過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,所以相同元素的前後順序並沒有改變,所以冒泡排序是一種穩定排序算法。
是否是原地算法
何爲原地算法?
- 不依賴額外的資源或者依賴少數的額外資源,僅依靠輸出來覆蓋輸入
- 空間複雜度爲 𝑂(1) 的都可以認爲是原地算法
- 非原地算法,稱爲 Not-in-place 或者 Out-of-place
冒泡排序屬於 In-place