怎麼樣才能對乙個list裡面的條目排序呢?

時間 2021-05-12 06:15:39

1樓:

給個快排和歸併的簡單的實現

template

struct LinkNode

LinkNode(const T & val, LinkNode * lk):next(lk), value(val){}

};template

LinkNode * __link_sort(LinkNode * &first)

template

void link_sort(T & head)

template

LinkNode * __link_msort(LinkNode *&head, std::size_t sz)

template

void link_msort(T & head, std::size_t sz)

2樓:暮無井見鈴

值得留意的是這裡用了 list 和迭代器,可能使用 forward_list 會更明顯。

氣泡排序本身不要求隨機訪問(例如以陣列下標形式訪問)。如果用陣列或 vector 這類隨機訪問的結構,就可能注意不到這點。不過如果不用隨機訪問結構,就較可能不小心寫出越界問題。

這裡出現的錯誤主要是交換迭代器 j 和 h 而非其所指向的元素,可以寫 std::iter_swap(j, h) 。另外就是 j!

=List.end() 有問題,應該要和自增後的 h 比較。

題外話:

std::list::sort (和 std::forward_list::sort )值得一學,應當試著自己實現一下。

這個排序的穩定性和 時間複雜度要求,基本限定了使用歸併排序。而且它與 中的演算法不同,它依賴於鍊錶結構,在歸併時重新連線結點而不額外分配空間,也不交換元素。

3樓:星空棒棒糖

乙個比較懶的方法…先把list裡面的資料按次序讀到乙個陣列中,用陣列排好序以後按次序對list裡面的資料修改,此方法適合於list資料量比較小。小細節,你需要設定乙個對list資料個數的計數器,通過計數器大小new乙個大小合適的陣列。

4樓:Milo Yip

你的 bubble sort 寫錯了,真要用 bubble sort 也是可以的。

但建議用 std::list::sort,大約 的。你要給乙個 functor 做比較,C++11 的話直接給個 lambda 表示式。

5樓:「已登出」

std::list自帶sort成員函式,對類排序只需要自定義乙個比較器(最簡單的形式就是返回值為bool的函式,也可以是仿函式或lambda):

#include

#include

structX;

bool

compare

(constX&

lhs,

constX&

rhs)

intmain()

怎麼樣才能忘掉乙個未曾謀面的人

素質寶貝 知道忘掉很難,更何況還是你們這種6年的感情,多給自己點時間吧,去重新談乙個,重新投入另外一段感情,試著不要去想他,這種還是要靠自己,外人怎麼說都沒用的 光陰的故事 西施貂蟬你未曾謀面,潘安宋玉你也未曾謀面,雷鋒不是也教會了你節儉,謝霆鋒彭于晏也許都曾讓你夜不能寐過,但是你不是隨著你的生活變...

怎麼樣才能對世界充滿善意?

Lance 請說,哪怕就一句,讓善意開始 總覺得女生澡堂比男生人多,可能是沒進過男生澡堂的緣故吧。人多的地方便有了故事。我們學校洗澡是插卡即洗,所以乙個水灑並不是總是在被用的,有的人搓澡的時候是會把卡放在一邊的,比如我。這時候,在旁邊等著的嗷嗷待洗的小姐姐,她們可能只是在心裡 嗷嗷 礙於面子或者抱著...

怎麼樣才能像聽力裡面的聲音那樣讀英語呢?

桃子姐在UK 模仿是第一步。模仿你聽到的語音,語調。我們學習一門新的語言時,要了解這個新語言的發音規則呀,語調呀。不要自己憑空捏造,也不要一味的轉牛角尖。語言有時候不好解釋,因為它和乙個國家的文化背景有關。比如北京話,北京人說話有自己的特色。你非要問為什麼,就是轉牛角尖了。語言不是數學,沒有什麼邏輯...