2014-04-02 24 views
0

正如標題所示,我需要按字母順序排列不少(數十萬)字符串。我有幾個鏈表,每個鏈表包含特定長度的單詞。也就是說,我有6個字母的字符串列表,7個字母的字符串列表,...,10個字母的字符串列表。在C語言中按字母順序排列一長串單詞的最佳方法是什麼?

我正在考慮使用基數排序,但我想看看是否有更好的選擇,因爲我找不到任何具體的任何具體內容,所有單詞的長度都是相同的。

編輯:

我有一個很長的單詞列表,在大小肆虐。我目前正在瀏覽列表並將這些單詞排列成大小類別。也就是說,當我遇到長度爲6的單詞時,它會進入「6長度」列表。正如我爲每個單詞所做的那樣,我實際上正在創建一個包含原始單詞及其字母化版本的新單詞對象(例如堆棧,ackst)。我想按字母順序排列每個「長度」列表,以便我可以輕鬆找到並組合字典。

回答

1

我不認爲長度與排序相同的事實是嗎?你沒有解釋你認爲會如何影響排序。

我推薦的排序鏈表的方法:不要。 :)而不是排序數組,並根據需要轉換爲/從鏈接列表中。這很可能會更快更輕鬆。

基本上:

  1. 步行列表以找出的長度。
  2. 分配一個值指針數組(在你的情況下,「值」意味着字符串)。
  3. 再次行走列表,將i:th數組元素設置爲指向第i個列表項的數據。
  4. 使用qsort()對數組進行排序。
  5. 第三次走列表,用i:th數組元素覆蓋第i個項目的數據
  6. 完成。

當然,您可以分別爲每個鏈表執行此操作。

+0

請參閱我上面的編輯。至於排序長度,我注意到大多數基數排序實現首先檢查他們必須處理的最長數字/字符串,我不需要這樣做。我需要從頭開始編寫自己的排序算法,我不能使用預先構建的排序。 – Michi

+0

@Michi對不起,我還不是很清楚。爲什麼你需要每個字符串的「按字母順序排列的版本」?這如何影響排序?爲什麼你需要*編寫自己的排序算法*? – unwind

+0

爲他的作業花花公子^^通過好方法解開 – chouaib

相關問題