我有一个作业,我必须从文本文件中读取4000个名称的列表,然后在读入时将其排序为C样式数组(而不是将它们全部读取然后排序)。由于这涉及很多元素变化指数,是否可以使用位移来同时重新排列大量元素?例如,
另外,如果您对此任务有任何提示,我会很感激。
答案 0 :(得分:1)
不,这听起来根本就不像你使用比特换档的东西。
您将拥有存储在数组中的不同元素(名称),您需要更改整个元素的顺序。这不是比特移位的用途;它用于将单个整数中的位向左或向右移动。
你应该学习qsort()
。
不确定“排序正如他们正在阅读”的要求,但最简单的解决方案是在添加每个名称时调用qsort()
。如果不允许或认为太昂贵,请考虑如何针对数组执行“排序插入”。
顺便说一句,C中的典型方法是使用指向字符串的指针数组,而不是实际字符串数组。这很好,因为对指针数组进行排序要容易得多。
所以你会:
char *names[4000];
而不是
char names[4000][64 /* or whatever */];
这将要求您在加载时为每个名称动态分配空间,这并不难。特别是如果你有strdup()
。 :)
答案 1 :(得分:0)
如果不允许使用qsort()(每次插入后都很愚蠢),你可以编写自己的插入排序。它不是一种非常有效的排序大型数组的方法,但我想这是你老师所期望的。