為什么快速排序不適合用鏈表 雙向鏈表的排序?
雙向鏈表的排序?由于它是按選擇排序的,在與當(dāng)前節(jié)點(diǎn)交換最小節(jié)點(diǎn)后,即調(diào)用reverse()后,當(dāng)前節(jié)點(diǎn)應(yīng)該移回一個(gè),這樣您就可以刪除P=I,因?yàn)橥獠縡or循環(huán)已經(jīng)有P=P->pnext將單向鏈表展
雙向鏈表的排序?
由于它是按選擇排序的,在與當(dāng)前節(jié)點(diǎn)交換最小節(jié)點(diǎn)后,即調(diào)用reverse()后,當(dāng)前節(jié)點(diǎn)應(yīng)該移回一個(gè),這樣您就可以刪除P=I,因?yàn)橥獠縡or循環(huán)已經(jīng)有P=P->pnext
將單向鏈表展開為雙向鏈表,然后按照快速排序法進(jìn)行排序。這需要o(n)空間,比數(shù)組o(logn)大得多,但可以保證o(nlogn)完成
刪除節(jié)點(diǎn)就是把一個(gè)節(jié)點(diǎn)從鏈表中取出,釋放內(nèi)存,連接前后節(jié)點(diǎn),序列號就是節(jié)點(diǎn)所在的位置,比如頭節(jié)點(diǎn)是1,下一個(gè)頭部節(jié)點(diǎn)是2,依此類推。該值是任意數(shù)字。例如,每個(gè)節(jié)點(diǎn)都有一個(gè)int類型的變量,根據(jù)該變量的值從小到大或從大到小排序
~]:例如。
將列表節(jié)點(diǎn)視為一個(gè)人,列表指針視為一個(gè)人的手(左手為向前指針,右手為向后指針)。非循環(huán)單向列表是這樣的:幾個(gè)人排成一行,每個(gè)人舉起右手指向右邊的人,最右邊的人的右手指向空中(空)。