鍊錶劃分 引申到快速排序

2021-07-23 22:14:44 字數 447 閱讀 1802

題目

給定乙個鍊錶和乙個值x,將鍊錶劃分成兩部分,使得劃分後小於x的結點在前,大於等於x的結點在後。在這兩部分中要保持原煉表中的出現順序。

如:給定鍊錶1→4

→3→2→5→2和x = 3,

返回:1→2→2→4→3→5。

新建兩個指標p1和p2。

遍歷一遍鍊錶:

第乙個1:比3小,放在p1後面:

p1-> 1

第二個4:比3大,放在p2後面:

p2 -> 4

第三個3:比3不小,放在p2後面:

p2-> 4 -> 3

重複以上過程

最後把p2放在p1的尾端,就實現了題目要求。

時間複雜度是o(n),空間複雜度為o(1);

話說,如果再選個數(如:1.5)繼續做上面的事情,然後再選個數做上面的事,再選個數….就這樣不停的做這件事,這就是快速排序!

鍊錶快速排序

對陣列中的元素按照從小到大的順序快速排序 void quicksort int a,int left,int right left和right分別是雙向鍊錶開頭和結尾的元素指標 void ranklist stu left,stu right while l r l score value l l ...

劃分 快速排序

很簡單。就不解釋了。就說說自己寫 時遇到的問題吧。無辜的總有乙個0值,插入到 左邊 12 10 3 198 120 8 54 7 12 10 3 0 0 8 54 7 只因為,陣列長度是10,但是只有8個資料,所以就有2個陣列元素為0 package high public class partin...

鍊錶的快速排序

感覺鍊錶的快速排序也挺好寫的,甚至比陣列更容易理解,但不知道為什麼看到很多人都說快排不適合單鏈表結構的資料。取第乙個元素為哨兵,遍歷鍊錶,將小於 等於 大於的元素分成3個子鍊錶 遞迴整理 小於 鍊錶 遞迴整理 大於 鍊錶 將3個鍊錶連線起來。實現如下 鍊錶快速排序,返回最後乙個元素的位址 mynod...