【问题标题】:C++ array value sortingC++ 数组值排序
【发布时间】:2010-07-23 21:24:26
【问题描述】:

如果我想像这样对第二维的 0 元素进行排序:

short arr[5];

arr[0][0] = 122;
arr[0][1] = 33;
arr[0][2] = 45;

arr[1][0] = 33;
arr[1][1] = 12;
arr[1][2] = 42;
.
.
.

它将对arr[i][0] 进行排序,但arr[i][1]arr[i][2] 将与arr[i][0] 一起出现在一个新元素中。

【问题讨论】:

  • 使用 C++ vector<> 而不是 C 样式的数组 - 然后您可以应用 sort 方法。如果您出于某种原因必须使用 C 样式的数组,请使用 qsort() 中的 cstdlib 进行排序。
  • @Paul: sort 是一个通用的非成员函数算法。它可以与数组一起使用,就像与vector 一起使用一样容易。
  • 您声明了一个一维数组并将其作为二维数组访问?你想在这里做什么?
  • 您能否列出(添加到问题中)2x3 示例的输出是什么以及所需的输出是什么?

标签: c++ arrays sorting


【解决方案1】:

使用 std::sort 算法对标准 C 数组进行排序:

#include <algorithm>
    ...
    sort(&arr[0], &arr[0] + 5)

现在如果你有一个二维数组,你可以用同样的思路对第一维中的每一项的第二维进行排序:

short arr[5][5];
...
for(int i = 0; i < 5; ++i) {
   sort(&arr[i][0], &arr[i][0] + 5);
}

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      std::sort 默认情况下会按升序对对象进行排序。要降序排序,可以使用std::greater函数对象:

      std::sort(arr, arr + 5, std::greater<short>());
      

      【讨论】:

        【解决方案4】:

        排序算法太多了,比如快速排序和冒泡排序,它们的复杂度不同。这种复杂性因数据集的大小、数据集中数据的默认顺序等而异。您必须研究您的数据集并选择一种能够更快满足您要求的算法。你可以在http://en.wikipedia.org/wiki/Sorting_algorithm找到排序算法。

        【讨论】:

        • 鉴于标准库有sort(平均情况N log N)和stable_sort(最坏情况N (log N)^2),很少 实现您自己的排序算法的一个很好的理由。
        【解决方案5】:

        如果这是家庭作业,您可能不想使用std::sort。你的老师可能会认为你厚脸皮:P

        我会按照 Muhit 所说的去做,并尝试从 Wikipedia 关于排序算法的文章中学习,http://en.wikipedia.org/wiki/Sorting_algorithm。大部分单篇文章的算法都是用伪代码实现的,所以你可以随便挑一个来编码。

        但如果这是针对不同的项目,是的,肯定会选择STL,现在应该没有任何理由手动编写排序算法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-26
          • 2021-11-14
          • 2020-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多