问题描述:
二维数组按照第一列从小到大的顺序进行排列,如果第一列相同,则按照第二列的大小进行排列,以此类推,得到最后经过排序的数组
解题思路:
由于数据维度不大,这里我们采用的是冒泡排序:(采用快排或者其他方法也可以使用下面的小技巧)
对于第一列相等的数据,我们没有办法立马决定是否进行交换,还需要对第二行进行判断;如果第一行相等的数据有多个(三个或三个以上),要判断出是否进行交互可能比较的列数是不同的,这样可能就会出现多层循环,计算复杂度较高。
为了避免多重循环,我们希望尽量在一次就可以对所有数据进行排序,这里我们直接使用了一个技巧:在计算的时候,如果遇到第一列值相等的值无法判断是否进行交换,就将两个值累加后一列(第二列)的数据,如果还是相等就再累加再后一列(第三列),直到计算出有大小的值,判断这两行是否需要进行交换。
代码:
#include <iostream>
#include <algorithm>
#include <vector>
#define M 3
#define N 4
using namespace std;
int main()
{
//int n=4,m=3;
int a[N][M]={
{3,4,2},{3,2,7},{3,2,2},{1,2,4}};
int i,j;
for(