u010479604 2018-11-12 07:33 采纳率: 83.3%
浏览 374
已采纳

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

排序前:
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

  • 写回答

4条回答 默认 最新

  • Italink 2018-11-12 10:02
    关注

    以冒泡为例

    图片说明

     #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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大