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

比如:有s[12][2].初始值为1334073815191520101581861251041429现在要如题排序了。结果应该是13340738295106124141... 比如:有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<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。n=0表示输入结束,不做处理。

Output:
对于每个测试实例,输出能完整看到的电视节目最多的个数,每个测试实例的输出占一行。

Sample Input:
12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
0
Sample Output:
5
展开
 我来答
xoaxa
推荐于2016-04-16 · TA获得超过8605个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3374万
展开全部
#include <stdio.h>

void sort(int a[][2],int n) {
int i,j,k,t;
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;
}
}
}
}

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;
printf("排序前:\n");
for(i = 0; i < 12; ++i) {
for(j = 0; j < 2; ++j)
printf("%4d",a[i][j]);
printf("\n");
}
sort(a,12);
printf("排序后:\n");
for(i = 0; i < 12; ++i) {
for(j = 0; j < 2; ++j)
printf("%4d",a[i][j]);
printf("\n");
}
return 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;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式