请问想完成如下数组的排序,有什么方法,谢谢?

排序前:
1 1 1
1 1 3
2 1 3
1 2 1
2 1 2
1 2 2
2 2 2
1 2 3
2 2 1
1 1 2
1 2 4
1 3 1
2 1 1
2 2 3

排序号:
1 1 1
1 1 2
1 1 3
1 2 1
1 2 2
1 2 3
1 2 4
1 3 1
2 1 1
2 1 2
2 1 3
2 2 1
2 2 2
2 2 3

以冒泡为例

图片说明

 #include<stdio.h>
int judge(int a[3], int b[3]) {     //排序方式
    if (a[0] != b[0])           //优先比较第一位
        return a[0] > b[0];
    else if (a[1] != b[1])
        return a[1] > b[1];
    else
        return a[2] > b[2];
}
int main() {
    int a[14][3] = { {1,1,1},{1,1,3},{2,1,3},{1,2,1},{2,1,2},{1,2,2},{2,2,2},{1,2,3},{2,2,1},{1,1,2},{1,2,4},{1,3,1},{2,1,1},{2,2,3} };
    int tmp[3] = { 0,0,0 };         //用于交换做中间量
    for (int i = 0; i < 14; i++) {
        for (int j = i+1; j < 14; j++) {
            if (judge(a[i], a[j])) {    
                tmp[0] = a[i][0];   //交换
                tmp[1] = a[i][1];
                tmp[2] = a[i][2];
                a[i][0] = a[j][0];
                a[i][1] = a[j][1];
                a[i][2] = a[j][2];
                a[j][0] = tmp[0];
                a[j][1] = tmp[1];
                a[j][2] = tmp[2];
            }
        }
    }
    for (int i = 0; i < 14; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

所有现有的排序方法都可用在这上面。就是从小到大排序是吧。

把每一组数据看成一个元素,排序的比较规则是三个等级的也就是类似字符串的比较:从前往后依次比较,遇到不相等的就返回结果,一直相等直到末尾就返回相等。当然这个排序规则需要自己定义。
比如: return a1.a!=a2.a?a1.a<a2.a?a1.b!=a2.b?a1.b<a2.b?a1.c<a2.c;

谢谢各位了,非常感谢