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

问题描述:

C语言程序题,根据二维数组第二个数的大小排序从小到大.
比如:有s[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
现在要如题排序了.
结果应该是
1 3
3 4
0 7
3 8
2 9
5 10
6 12
4 14
10 15
8 18
15 19
15 20
并且将这结果仍然保存在s[12][2]中.
输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n
1个回答 分类:综合 2014-12-03

问题解答:

我来补答
#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;
}
再问: 还是直接问你题吧。。。。
 
 
展开全文阅读
剩余:2000
上一页:不是奥数题