对角二维数组排序

时间:2016-06-19 05:03:32

标签: c++

首先我创建了我的二维数组,然后我将它翻译成一维数组,然后我对1D数组进行了气泡排序,但是在我找不到模式后将其带回到对角排序的2D数组中。

#include<iostream>
#include<iomanip>

const int r = 10;
const int c = 10;
const int lim = r * c;
int A[r][c] = { 0 };
int B[lim];

using namespace std;

void generatearray(int A[][], int r, int c){
srand(time(NULL));
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
A[i][j] = rand() % lim;
}
}
}

void transformingto1Darray(int A[r][c], int b[lim]){
int p = 0;

for (int m = 0; m < r; m++){
for (int n = 0; n < c; n++){

B[p] = A[m][n];
p++;

}
}
}

void sorting1Darray(int B[][]){
int temp = 0;

for (int k = 0; k < lim - 1; k++){
for (int i = 0; i < lim - 1; i++)
if (B[i] > B[i + 1]){
temp = B[i];
B[i] = B[i + 1];
B[i + 1] = temp;
}
}
}

void sortingdiagonally2Darray(int A[][], int B[]){



int main{
generatearray(A);
transformingto1Darray(A, B);
sorting1Darray(B);
sortingdiagonally2Darray(A, B);

return 0;

}

1 个答案:

答案 0 :(得分:0)

这有点像一个不稳定的解决方案,但它起作用。由于多维索引的工作方式,B[i]中的值将等于A[0][i]中的值。

在您的情况下,您需要在sortingdiagonally2Darray函数中使用此类内容。

for (int i = 0; i > r * c; i++) {
     A[0][i] = B[i];
}

这是有效的,因为引擎盖阵列只是指针。 B[x]*(B + x)的语法糖,而A[0][x]等同于*(*(A + 0) + x),因为它是指向指针的指针(因此是双星/双括号)。