本文主要講解下平常我們用到的堆排序,歸並排序以及快速排序的時間和空間復雜度。
堆排序:
堆排序分為建堆和調整堆。建堆是通過父節點和子節點兩兩比較並交換得到的,時間復雜度為O(n),調整堆需要交換n-1次堆頂元素,並調整堆,調整堆的過程就是滿二叉樹的深度logn,所以時間復雜度為O(nlogn),所以最終時間復雜度為O(nlogn)。
空間復雜度為O(1)。
不穩定排序。
歸並排序:
歸並排序主要就是分解,和歸並排序兩部分,分解需要掃描所有的元素,所以時間復雜度為O(n)。歸並過程中,兩兩歸並,其實就是滿二叉樹,深度為logn,每一層都要進行兩兩比較,也就是n次,所以時間復雜度為O(nlogn)。歸並過程中是需要保存排序好的元素,所以空間復雜度為O(n)。
穩定排序。
快速排序:
簡單的可以認為,每次需要二分分解,左右兩邊均勻,每層需要比較n次比較,所以時間復雜度為O(nlogn)。當然如果待排序數組本身就是正序或逆序,那么時間復雜度會O(n2)。
空間復雜度為O(logn),因為遞歸棧空間的使用問題。
不穩定排序。