/**
* 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語言指標知識之不牢固,特別是指標的指標方面的知識。單鏈表的快排序和陣列的快排序基本思想相同,同樣是基於劃分,但是又有很大的不同 單鏈表不支援基於下標的...