二维数组排序
第一种
正常思维
每行按一维数组比较
每行比较结束后,比较该行末位和下一行首位
代码:
#include<iostream>
using namespace std;
int main()
{
int a[3][3] = { {9,8,7},{6,5,4},{3,2,1} };
int i, j,k, * x, * y;
for (k = 0; k < 8; k++)
{
for (i = 0; i < 3; i++)
{
for (j = 0; j < 2; j++)
{
if (a[i][j] > a[i][j + 1])swap(a[i][j], a[i][j + 1]);
}
if (i != 2&&a[i][2] > a[i + 1][0])swap(a[i][2] , a[i + 1][0]);
}
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
cout << a[i][j] << ' ';
}
cout << endl;
}
}
第二种
利用指针
学过指针就能懂
代码:
#include<iostream>
using namespace std;
int main()
{
int a[3][3] = { {9,8,7},{6,5,4},{3,2,1} };
int i, j,k, * x, * y;
for (k = 0; k < 8; k++)
{
x = &a[0][0];
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
y = &a[i][j];
if (*x > * y)swap(*x , * y);
x = &a[i][j];
}
}
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
cout << a[i][j] << ' ';
}
cout << endl;
}
}
第三种
把二维数组当做一维数组
把一维数组的行数转化为二维数组的行数和列数
例 第5个数 =(5/3,5%3)=(1,2)
代码:
#include<iostream>
using namespace std;
int main()
{
int a[3][3] = { {9,8,7},{6,5,4},{3,2,1} };
int i, j;
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8 - i; j++)
{
if (a[j / 3][j % 3] > a[(j+1) / 3][(j+1) % 3])
swap(a[j / 3][j % 3] , a[(j + 1) / 3][(j + 1) % 3]);
}
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
cout << a[i][j] << ' ';
}
cout << endl;
}
}