首先我创建了我的二维数组,然后我将它翻译成一维数组,然后我对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;
}
答案 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)
,因为它是指向指针的指针(因此是双星/双括号)。