1451 單鏈表快速排序

2021-10-05 09:43:21 字數 1152 閱讀 9354

給定乙個單鏈表,請使用快速排序演算法對其排序。

要求:期望平均時間複雜度為 o(nlogn),期望額外空間複雜度為 o(logn)。

思考題: 如果只能改變鍊錶結構,不能修改每個節點的val值該如何做呢?

資料範圍

鍊錶中的所有數大小均在 int 範圍內,鍊錶長度在 [0,10000]。

輸入樣例:

[5, 3, 2]

輸出樣例:

[2, 3, 5]

#include

using

namespace std;

class

solution

return head;

} listnode*

quicksortlist

(listnode* head)

//得到三個鍊錶,遞迴左邊和右邊鍊錶

left-

>next = mid-

>next = right-

>next =

null

;//各個鍊錶尾部置null

//只需遍歷左區間與右區間

lhead-

>next =

quicksortlist

(lhead-

>next)

; rhead-

>next =

quicksortlist

(rhead-

>next)

;//鍊錶拼接

gettail

(lhead)

->next = mhead-

>next;

//拼接左邊鍊錶與中間鍊錶

gettail

(lhead)

->next = rhead-

>next;

//拼接前面拼接好的鍊錶與右邊鍊錶

//返回的煉表頭

auto re = lhead-

>next;

//記憶體**

delete lhead;

delete mhead;

delete rhead;

return re;}}

;

AcWing 1451 單鏈表快速排序

採用快排實現鍊錶的排序,比較難處理的地方是如何實現分隔,由於鍊錶只能從前往後遍歷不能從後往前遍歷,那麼 常規的分隔方法 常規的分隔方法不適用,另外一種分隔方法 鍊錶實現起來比較困難,涉及到交換兩個節點 如何交換鍊錶的兩個節點 交換完兩個節點後需要將鍊錶按照基準元素的位置分成兩部分,分別進行快排,快排...

單鏈表快速排序

今天在學習 程式設計師使用演算法 時,看到了單鏈表快排序這一節。初看時感覺程式有很大的問題,但是細細品味之後卻發現程式設計的極為巧妙,同時又深感自己c語言指標知識之不牢固,特別是指標的指標方面的知識。單鏈表的快排序和陣列的快排序基本思想相同,同樣是基於劃分,但是又有很大的不同 單鏈表不支援基於下標的...

單鏈表快速排序

今天在學習 程式設計師使用演算法 時,看到了單鏈表快排序這一節。初看時感覺程式有很大的問題,但是細細品味之後卻發現程式設計的極為巧妙,同時又深感自己c語言指標知識之不牢固,特別是指標的指標方面的知識。單鏈表的快排序和陣列的快排序基本思想相同,同樣是基於劃分,但是又有很大的不同 單鏈表不支援基於下標的...