1. 程式人生 > >Leetcode148-連結串列排序 快慢指標

Leetcode148-連結串列排序 快慢指標

看題目有兩個要求:1)時間複雜度為O(nlogn);2)空間複雜度為常數,即不能增設額外的空間。 滿足這樣要求的排序演算法,我們首先想到快排,合併排序和堆排序。我們來分析下幾種排序演算法對時間和空間複雜度的要求,堆排序實現上過於繁瑣,我們不做考慮。快排的最壞的時間複雜度是O(n^2),平均複雜度為O(nlgn),如果按照題目的嚴格要求顯然快排是不滿足的,而且快排的實現引入了遞迴操作,遞迴呼叫的棧空間嚴格意義上說也是額外空間。另外值得注意的一點是:連結串列不像陣列一樣,可以隨機訪問元素,連結串列必須順序訪問,所以一般的遞迴操作很難實現,雖然也可以實現哈,見該文:遞迴實現連結串列排序對於歸併排序,我們知道需要O(n)的空間複雜度,即需要一個臨時陣列來存放排好序的元素,顯然也合理,但那是針對的是陣列,對於連結串列,歸併排序的空間複雜度為in-place sort,即不需要額外空間就可以完成

。另外,歸併排序還有一個比較好的優勢是其穩定性。所以,對於本題的解法,我們首選歸併排序。

快慢指標

解法: