C语言程序题,根据二维数组第二个数的大小排序从小到大.

学习 时间:2026-04-09 01:22:41 阅读:3196
C语言程序题,根据二维数组第二个数的大小排序从小到大.比如:有s[12][2].初始值为1 33 40 73 815 1915 2010 158 186 125 104 142 9现在要如题排序了.结果应该是1 33 40 73 82 95 106 124 1410 158 1815 1915 20并且将这结果仍然保存在s[12][2]中.输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n

最佳回答

聪慧的衬衫

务实的金鱼

2026-04-09 01:22:41

#include <stdio。h>void sort(int a[][2],int n) {\x09int i,j,k,t;\x09for(i = 0; i < n - 1; ++i) {\x09\x09k = i;\x09\x09for(j = i + 1; j < n; ++j) {\x09\x09\x09if(a[k][1] > a[j][1])\x09\x09\x09\x09k = j;\x09\x09}\x09\x09if(k != i) {\x09\x09\x09for(j = 0; j < 2; ++j) {\x09\x09\x09\x09t = a[k][j];\x09\x09\x09\x09a[k][j] = a[i][j];\x09\x09\x09\x09a[i][j] = t;\x09\x09\x09}\x09\x09}\x09}}int main() {\x09int a[12][2] = {1,3,3,4,0,7,3,8,15,19,15,20,10,15,8,18,6,12,5,10,4,14,2,9};\x09int i,j;\x09printf("排序前:\n");\x09for(i = 0; i < 12; ++i) {\x09\x09for(j = 0; j < 2; ++j)\x09\x09\x09printf("%4d",a[i][j]);\x09\x09printf("\n");\x09}\x09sort(a,12);\x09printf("排序后:\n");\x09for(i = 0; i < 12; ++i) {\x09\x09for(j = 0; j < 2; ++j)\x09\x09\x09printf("%4d",a[i][j]);\x09\x09printf("\n");\x09}\x09return 0;} 再问: 还有没有更简单省事的方法?,因为像这样的话需要1秒多,计算量大。。。会超时。。 再答: 显示部分可以省去,这样会节省更多的时间。当然,若将排序函数融合在main()中,也会节省函数调用时间。#include <stdio。h> int main() {    int a[12][2] = {1,3,3,4,0,7,3,8,15,19,15,20,10,15,8,18,6,12,5,10,4,14,2,9};    int i,j,k,t,n = 12;    for(i = 0; i < n - 1; ++i) {        k = i;        for(j = i + 1; j < n; ++j) {            if(a[k][1] > a[j][1])                k = j;        }        if(k != i) {            for(j = 0; j < 2; ++j) {                t = a[k][j];                a[k][j] = a[i][j];                a[i][j] = t;            }        }    }    return 0;}再问: 还是直接问你题吧。。。。

最新回答共有2条回答

  • 傲娇的太阳
    回复
    2026-04-09 01:22:41

    #include <stdio。h>void sort(int a[][2],int n) {\x09int i,j,k,t;\x09for(i = 0; i < n - 1; ++i) {\x09\x09k = i;\x09\x09for(j = i + 1; j < n; ++j) {\x09\x09\x09if(a[k][1] > a[j][1])\x09\x09\x09\x09k = j;\x09\x09}\x09\x09if(k != i) {\x09\x09\x09for(j = 0; j < 2; ++j) {\x09\x09\x09\x09t = a[k][j];\x09\x09\x09\x09a[k][j] = a[i][j];\x09\x09\x09\x09a[i][j] = t;\x09\x09\x09}\x09\x09}\x09}}int main() {\x09int a[12][2] = {1,3,3,4,0,7,3,8,15,19,15,20,10,15,8,18,6,12,5,10,4,14,2,9};\x09int i,j;\x09printf("排序前:\n");\x09for(i = 0; i < 12; ++i) {\x09\x09for(j = 0; j < 2; ++j)\x09\x09\x09printf("%4d",a[i][j]);\x09\x09printf("\n");\x09}\x09sort(a,12);\x09printf("排序后:\n");\x09for(i = 0; i < 12; ++i) {\x09\x09for(j = 0; j < 2; ++j)\x09\x09\x09printf("%4d",a[i][j]);\x09\x09printf("\n");\x09}\x09return 0;} 再问: 还有没有更简单省事的方法?,因为像这样的话需要1秒多,计算量大。。。会超时。。 再答: 显示部分可以省去,这样会节省更多的时间。当然,若将排序函数融合在main()中,也会节省函数调用时间。#include <stdio。h> int main() {    int a[12][2] = {1,3,3,4,0,7,3,8,15,19,15,20,10,15,8,18,6,12,5,10,4,14,2,9};    int i,j,k,t,n = 12;    for(i = 0; i < n - 1; ++i) {        k = i;        for(j = i + 1; j < n; ++j) {            if(a[k][1] > a[j][1])                k = j;        }        if(k != i) {            for(j = 0; j < 2; ++j) {                t = a[k][j];                a[k][j] = a[i][j];                a[i][j] = t;            }        }    }    return 0;}再问: 还是直接问你题吧。。。。

上一篇 设复数z满足1+2iz=i

下一篇 标志着无产阶级第一次登上政治历史舞台的事件是神马?