2013-03-26 150 views
0

我有一個任務,在該任務中,我必須從文本文件中讀取4000個名稱的列表,然後將它們排序爲C樣式數組,然後將它們讀入(而不是讀取它們然後進行排序) 。由於這會涉及到很多元件改變索引,纔有可能使用bitshifting重新安排大量同時元素的?例如,數組中的移位元素

  1. 聲明20大小
  2. 地方變量x索引10的基於堆的陣列
  3. 與數組數據類型的大小指數9執行位位移使得x現在在指數11

另外,如果你有在一般任務任何提示我將不勝感激。

+1

提示:編寫一些代碼。如果您有特定的問題/問題,請回來,發佈代碼並再次提問。 – 2013-03-26 14:12:11

+0

使用數組將需要大量的移位,鏈表是不是你的選擇?另外,我不明白'使用bitshifting'是什麼意思......以什麼方式? – gerrytan 2013-03-26 14:13:22

+0

這是一個帶有兩個元素的賦值,一個是鏈接列表,另一個必須是基於C風格的堆陣列。 我基本上試圖想出一種有效的方法來將一個數組中的100個元素向右移動一個元素,這樣我就可以以有效的方式在開始時在先前佔用的元素中放置某些元素。 – user2211776 2013-03-26 14:22:26

回答

1

不,這聽起來根本就不像你想使用偏移的東西。

您將在數組中存儲不同的元素(名稱),並且您需要更改整個元素的順序。這不是使用偏移的原因;它用於將一個整數中的位向左或向右移動。

你應該學會qsort()

不確定「排序爲他們正在讀入」的要求,但最簡單的解決方案是隻需要在添加每個名稱時調用qsort()。如果這不被允許或認爲太昂貴,請考慮如何對數組執行「分類插入」。

順便說一句,C中的典型方法是使用指向字符串的指針數組,而不是實際字符串數組。這很好,因爲排序指針數組要容易得多。

所以你會:

char *names[4000]; 

,而不是

char names[4000][64 /* or whatever */]; 

這就要求你爲,因爲它是雖然加載的每個名字,這是不是要拼命動態分配空間。特別是如果你有strdup()。 :)

+0

這是一個遠射,我只需要訴諸使用昂貴的方法。感謝您的迴應。 – user2211776 2013-03-26 14:34:47

0

如果不允許使用qsort()(在每次插入後都很愚蠢),則可以編寫自己的插入排序。這不是一種排序大型數組的非常有效的方法,但我想這是你的老師所期待的。