Leetcode148-鏈表排序 快慢指針

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

快慢指針

https://blog.csdn.net/qq_21815981/article/details/79833976

解法:

https://blog.csdn.net/smile_watermelon/article/details/47187937

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章