簡體   English   中英

以遞增值對C / C ++中的2D數組進行排序; 排序后知道原始位置?

[英]Sorting 2D arrays in C/C++ in increasing values; knowing the original positon after sorting?

我已經編寫了一個程序,該程序以遞增的值對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數組。

一種簡單的方法是存儲一個小的結構,而不是在原始Array2D

struct {
    int value;
    int position;
};

在對數組排序之前,將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);

不知道這是否可移植,但是在我的平台(VC9)上,我可以將其視為一維數組並按常規進行排序,即:

int array2d[2][5];
//fill array...

int *array = (int*)array2d;
//so  array[4] == array2d[0][4]
//and array[6] == array2d[1][1]

//sort as a 1d array using your favourite algorithm
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM