位移数组中的元素

时间:2013-03-26 14:09:16

标签: c++ arrays sorting bit-shift

我有一个作业,我必须从文本文件中读取4000个名称的列表,然后在读入时将其排序为C样式数组(而不是将它们全部读取然后排序)。由于这涉及很多元素变化指数,是否可以使用位移来同时重新排列大量元素?例如,

  1. 声明基于堆的20个大小的数组
  2. 放置变量x index 10
  3. 使用数组数据类型的大小对索引9执行bithift,使x现在位于索引11中
  4. 另外,如果您对此任务有任何提示,我会很感激。

2 个答案:

答案 0 :(得分:1)

不,这听起来根本就不像你使用比特换档的东西。

您将拥有存储在数组中的不同元素(名称),您需要更改整个元素的顺序。这不是比特移位的用途;它用于将单个整数中的位向左或向右移动。

你应该学习qsort()

不确定“排序正如他们正在阅读”的要求,但最简单的解决方案是在添加每个名称时调用qsort()。如果不允许或认为太昂贵,请考虑如何针对数组执行“排序插入”。

顺便说一句,C中的典型方法是使用指向字符串的指针数组,而不是实际字符串数组。这很好,因为对指针数组进行排序要容易得多。

所以你会:

char *names[4000];

而不是

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

这将要求您在加载时为每个名称动态分配空间,这并不难。特别是如果你有strdup()。 :)

答案 1 :(得分:0)

如果不允许使用qsort()(每次插入后都很愚蠢),你可以编写自己的插入排序。它不是一种非常有效的排序大型数组的方法,但我想这是你老师所期望的。