02.複雜度分析與穩定性(數據結構算法基本)

  • 最好情況時間複雜度
  • 最壞情況時間複雜度
  • 平均情況時間複雜度
// 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章