用單鏈表實現快排quicksort

2021-10-11 01:29:24 字數 980 閱讀 4728

#include

#include

using

namespace std;

struct node

;typedef node* ptrtonode;

typedef node* list;

typedef ptrtonode position;

//建立鍊錶

list createlist()

//建立節點

ptrtonode createtmp()

//用頭插法將資料插入到鍊錶當中

void

add(list& l,

int e)

//!!!!!此處必須加『&』符號,否則只輸出乙個資料

}//只交換指標的內容

void

swap

(ptrtonode p, ptrtonode q)

//快速排序

void

quick_sort

(ptrtonode head, ptrtonode tail)

}swap

(head, p)

;quick_sort

(head, pre)

;quick_sort

(p->next, tail);}

//將鍊錶的資料列印出來

void

printlist

(list& l)

}int

main()

cout <<

"原資料:"

;printlist

(l);

cout << endl << endl;

quick_sort

(l->next, p)

; cout << endl <<

"快排後資料: "

;printlist

(l);

return0;

}

用快排思想實現單鏈表

演算法思想 對於乙個鍊錶,以head節點的值作為key,然後遍歷之後的節點,可以得到乙個小於key的鍊錶和大於等於key的鍊錶 由此遞迴可以對兩個鍊錶分別進行快速。這裡用到了快速排序的思想即經過一趟排序能夠將小於key的元素放在一邊,將大於等於key的元素放在另一邊 面試回答 如果面試官問快速排序是...

單鏈表實現快排

快排的思想 以乙個點為分割點,將陣列分割成前半部分比這個點小,後半部分比這個點大的兩部分,然後再遞迴對這兩半段進行上述同樣的操作,然後合起來 此處一般直接在原陣列中進行操作,交換元素 是一種分治的思想。轉移到鍊錶上 以乙個點為分割點,將鍊錶分割成比這個點大的大鍊錶部分,乙個比這個點小的小鍊錶部分,然...

單鏈表的快排實現

分析 因為單鏈表只能單向前進,所以不能採用常見的快排模式。我們只需要兩個指標p和q,初始分別為head和head.next,這兩個指標均往next方向移動,移動的過程中保持p之前的key都小於選定的key,p和q之間的key都大於選定的key,那麼當q走到末尾的時候便完成了一次支點的尋找。後面每個部...