2013-03-26 52 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()(在每次插入后都很愚蠢),则可以编写自己的插入排序。这不是一种排序大型数组的非常有效的方法,但我想这是你的老师所期待的。