單鏈表的快速排序

2021-09-10 09:04:31 字數 624 閱讀 3056

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

listnode* partition(listnode* start ,listnode* end)

q = q -> next;

}swapvalue(p,start);

return p;

}void quicksort(listnode* start ,listnode* end)

}listnode* sortlist(listnode* head)

};

單鏈表快排的主要問題在於partition函式不好計算。因為要出現頻繁讀取下標的情況。而單鏈表恰恰無法輕易讀取下標。

所以我們這裡採取兩個指標,p從頭,q從第二個結點,每當q小於pivot時候,則令p=next,然後交換pq的值,把小的值交換到左邊。同時p也向右側移動,p最後作為pivot返回。

swap函式和quicksort函式直接照陣列快速排序改一改就行了。

但是此排序效能並不優秀,我懷疑是leetcode上的測試用例有很多順序逆序的case。

單鏈表快速排序

今天在學習 程式設計師使用演算法 時,看到了單鏈表快排序這一節。初看時感覺程式有很大的問題,但是細細品味之後卻發現程式設計的極為巧妙,同時又深感自己c語言指標知識之不牢固,特別是指標的指標方面的知識。單鏈表的快排序和陣列的快排序基本思想相同,同樣是基於劃分,但是又有很大的不同 單鏈表不支援基於下標的...

單鏈表快速排序

今天在學習 程式設計師使用演算法 時,看到了單鏈表快排序這一節。初看時感覺程式有很大的問題,但是細細品味之後卻發現程式設計的極為巧妙,同時又深感自己c語言指標知識之不牢固,特別是指標的指標方面的知識。單鏈表的快排序和陣列的快排序基本思想相同,同樣是基於劃分,但是又有很大的不同 單鏈表不支援基於下標的...

單鏈表快速排序

今天在學習 程式設計師使用演算法 時,看到了單鏈表快排序這一節。初看時感覺程式有很大的問題,但是細細品味之後卻發現程式設計的極為巧妙,同時又深感自己c語言指標知識之不牢固,特別是指標的指標方面的知識。單鏈表的快排序和陣列的快排序基本思想相同,同樣是基於劃分,但是又有很大的不同 單鏈表不支援基於下標的...