【问题标题】:Number and string sorting Al数字和字符串排序 Al
【发布时间】:2015-09-30 02:45:26
【问题描述】:

我想对一些数字+字符串组合进行排序,但排序将基于该组合中的数字。您能提出一个最佳解决方案吗?

假设我的字符串是:
12 马斯德夫
4 Oasd
44 塔楼
等等。排序将基于 12、4、44 等数字,排序后我必须显示完整的字母数字字符串。

由于程序将在数千个数据上运行,我不想拆分字符串并比较每次迭代的数字。我的计划是提取数字并将它们放入数组中,然后对数组进行排序。排序完成后,我想放回带有关联字符串的数字并将它们保存在字符串数组中以显示。 它应该在 C++ 中完成。应该应用算法 - 插入排序、快速排序、合并排序等。

【问题讨论】:

  • std::map/std::multimap很容易解决。
  • @bku_drytt 除非,当然,家庭作业是让课程做到这一点。他的问题描述的最后一句话让我觉得教授希望用各种排序算法来实现它。 AFAIK(我不是std:: 的专家)您只能提供比较功能,而不是排序功能,这让我相信分配不仅仅是使用std::map

标签: java c++ arrays algorithm sorting


【解决方案1】:

创建一个类来存储完整的字符串和数字。制作课程Comparable。将您的字符串列表转换为类列表。使用相关的排序方法对列表进行排序。迭代列表并打印字符串字段。

抱歉,这是 Java 的答案,因为您将它标记为 Java。替换/删除 Comparable 任何对 C++ 有益的东西。

【讨论】:

    【解决方案2】:

    我将假设这两个部分在单独的变量中,并且不作为一个字符串一起出现(如果它们是你可以将它们存储在一个列表中)。

    首先考虑一个地图。地图的每个“桶”都可以用一个数字表示。在每个地图桶中都有一个列表中的一堆字符串。 (请注意,这也可以通过数组来解决,特别是如果 Integer 部分始终低于某个固定值)java 等效项如下所示:

        Map map = new HashMap<Integer,ArrayList<String>>();
    

    为了对此自定义集合进行排序,首先将在返回列表的地图上搜索值的整数部分。列表中的每个项目都将具有相同的起始编号。所以我们现在在列表中搜索值的字符串部分(我假设列表已排序,因此您可以进行任何您想要的排序,即:选择/快速排序)。

    这种搜索的优势意味着,如果在 Hashmap 中找不到该数字,您会立即知道它没有字符串部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-14
      • 1970-01-01
      相关资源
      最近更新 更多