題目
給定乙個鍊錶和乙個值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...