鍊錶的快速排序

2021-07-08 10:39:30 字數 781 閱讀 1763

感覺鍊錶的快速排序也挺好寫的,甚至比陣列更容易理解,但不知道為什麼看到很多人都說快排不適合單鏈表結構的資料。

取第乙個元素為哨兵,遍歷鍊錶,將小於、等於、大於的元素分成3個子鍊錶;

遞迴整理「小於」鍊錶;

遞迴整理「大於」鍊錶;

將3個鍊錶連線起來。

**實現如下:

//鍊錶快速排序,返回最後乙個元素的位址

mynode* quicksortforlist(mynode* &head)

else if(pt->val == pivot->val)

else

}ls_pt->next=nullptr;//鍊錶最後乙個元素指向空指標

eq_pt->next=nullptr;

bg_pt->next=nullptr;

bg_pt=quicksortforlist(bg_head->next);//

if(ls_pt) //如果小於哨兵的鍊錶不為空,則將3個鍊錶首尾鏈結在一起

else

delete ls_head;

delete bg_head;

//如果大於哨兵的鍊錶不為空返回該鍊錶的最後乙個元素的位置

//否則返回等於哨兵的鍊錶的最後乙個元素的位置

if(bg_pt) return bg_pt;

else return eq_pt;

}

mynode定義:

class mynode

;

鍊錶快速排序

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

C語言 雙向鍊錶的快速排序

之前一直想用雙向鍊錶來快排,想像陣列快排一樣給第乙個陣列下標 第乙個有值節點的指標 和最後乙個陣列下標 最後乙個有值節點指標 結果執行時經常有問題,程式有時會出錯,於是紙上演算了幾次發現會訪問到未知的記憶體.因為當low和high在最左側或者最右側相同時,再經過一次呼叫時 box qsort i,l...

鍊錶劃分 引申到快速排序

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