在C/C++中以递增的值对2D数组进行排序; 排序后知道原始位置?

Cur*_*ous 0 c c++ multidimensional-array

我已经编写了一个程序,可以按增加的值对2D数组进行排序.

这是我的输入和输出.

Input:

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

Output:

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

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

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

它可以用C,C++完成.

注意:对于排序,我将2D数组转换为1D数组,并使用冒泡排序对其进行排序并转换回2D数组.

And*_*nck 6

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

struct {
    int value;
    int position;
};
Run Code Online (Sandbox Code Playgroud)

在对数组进行排序之前,将位置存储在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);
Run Code Online (Sandbox Code Playgroud)