contributed by < Julian-Chu >
linux2021
當 pointer to list 為 NULL 直接返回
當 pointer to list 不為 NULL 繼續處理
與針對陣列操作的 quicksort 類似,先挑選基準點而後進行比較,這邊利用第一個 node 作為pivot , 同時把 pivot 與 next node 的連結切斷
將其他的 node 與 pivot 比較分為兩群 left & right,大於 pivot 放在 right , 其餘放在 left
對 left 跟 right,繼續處理,直到 left 跟 right 排好序
最後利用 left -> pivot -> right 的順序把 linked list 組合起來
題目的 list_add_node_t 為
如果實作細節是在 list 的 tail.next 加上節點的話,會導致每次都需要走訪 list 所有節點,導致這個函式的時間複雜度為 ,由於 quicksort 在這一步只需要分成 left 和 right 兩部分, 不需要保持 left 跟 right 的位置或是插入順序 (quicksort 的 unstable 特性),list_add_note_t
效率更高。
todo: 閱讀 C11 對 inline 跟 static 的敘述