c++ - 在 C/C++ 中按递增值对二维数组进行排序;知道排序后的原始位置?

标签 c++ c multidimensional-array

我已经编写了一个按递增值对二维数组进行排序的程序。

这是我的输入和输出。

Input:<p></p>

<p>Array2D[0][0] = 99 
Array2D[0][1] = 10 
Array2D[0][2] = 97 
Array2D[0][3] = 10 
Array2D[0][4] = 14 
Array2D[1][0] = 73 
Array2D[1][1] = 53 
Array2D[1][2] = 81 
Array2D[1][3] = 22 
Array2D[1][4] = 88 </p>

<p>Output:</p>

<p>Array2D[0][0] = 10 
Array2D[0][1] = 22 
Array2D[0][2] = 53 
Array2D[0][3] = 53 
Array2D[0][4] = 73 
Array2D[1][0] = 73 
Array2D[1][1] = 81 
Array2D[1][2] = 81 
Array2D[1][3] = 88 
Array2D[1][4] = 99 
</p>

现在,我想知道的是值(value)观的原始位置。例如。 Array2D[0][0] 现在包含 10,但我也想知道这个 10 之前在输入中的位置,例如,它在输入中的 Array2D[0][3] 中。所以,我想要所有值的原始位置。

我不知道该怎么做。也许使用一些额外的结构来记住位置或使用指针。任何帮助将不胜感激。

可以用C、C++实现。

注意:对于排序,我将二维数组转换为一维数组,并使用冒泡排序对其进行排序,然后转换回二维数组。

最佳答案

一种简单的方法是,不是只在原始 Array2D 中存储值,而是存储一个小结构:

struct {
    int value;
    int position;
};

在对数组进行排序之前,您将位置存储在 position 变量中。要获得完整的解决方案,请尝试这样的事情:

struct Element {
    Element() {}
    Element(int value) : value(value) {}
    bool operator < (const Element& rhs) const {return value < rhs.value;}
    int value;
    int position;
};

Element Array2D[2][5];
Array2D[0][0] = 99;
Array2D[0][1] = 10;
Array2D[0][2] = 97;
Array2D[0][3] = 10;
Array2D[0][4] = 14;
Array2D[1][0] = 73;
Array2D[1][1] = 53;
Array2D[1][2] = 81;
Array2D[1][3] = 22;
Array2D[1][4] = 88;
int elementCount = sizeof(Array2D) / sizeof(Element);
for (int i = 0; i < elementCount; ++i) {
    (&Array2D[0][0])[i].position = i;
}
std::stable_sort(&Array[0][0], &Array[0][0] + elementCount);

关于c++ - 在 C/C++ 中按递增值对二维数组进行排序;知道排序后的原始位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1865874/

相关文章:

php - 相对于 x,y 位置的散列、多边形形状

c++ - 将二进制转换为 ASCII

c - 使用 libxml2 解析 xml 文件

c - 为什么即使我使用 float ,5/2 的结果也是 '2'?

c - 测试元素是否为数组 c

java - 如何在 Java 中比较两个二维数组?

c++ - 在派生模板类中使用条件类型特征覆盖基类中的虚拟方法

c++ - 如何使用 cout 打印 0x0a 而不是 0xa?

c - 如何在C中按顺序执行子进程

c# - 使用 LINQ 表达式创建树