You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言自定义二维数组(最大[100][2])Bubblesort实现求助

用冒泡排序处理自定义大小的二维数组(最大[100][2])

嘿,作为编程新手,用冒泡排序处理二维数组确实得一步步来,我给你整理了清晰的代码和讲解,帮你搞定这个需求~

需求梳理

我们要实现的功能是:

  • 让用户输入自定义数量的坐标数据(最多100条,对应数组大小[100][2])
  • 用冒泡排序对这些坐标进行排序(默认按X坐标升序,也可以轻松改成按Y坐标)
  • 输出排序后的结果

完整代码示例(以C语言为例)

#include <stdio.h>

int main() {
    // 定义最大100行2列的二维数组,存储X、Y坐标
    int arr[100][2];
    int n, i, j, temp;

    // 获取用户输入的数据条数
    printf("请问您要输入多少条数据?");
    scanf("%d", &n);

    // 校验输入数量不超过最大限制
    if (n > 100) {
        printf("数据条数不能超过100,请重新输入!\n");
        return 1;
    }

    // 循环输入X、Y坐标
    for (i = 0; i < n; i++) {
        printf("请输入第%d条数据的X坐标:", i+1);
        scanf("%d", &arr[i][0]);
        printf("请输入第%d条数据的Y坐标:", i+1);
        scanf("%d", &arr[i][1]);
    }

    // 冒泡排序:按X坐标升序排列
    for (i = 0; i < n-1; i++) {
        for (j = 0; j < n-i-1; j++) {
            // 如果当前X坐标大于下一个,交换整个坐标对
            if (arr[j][0] > arr[j+1][0]) {
                // 交换X坐标
                temp = arr[j][0];
                arr[j][0] = arr[j+1][0];
                arr[j+1][0] = temp;
                // 交换Y坐标
                temp = arr[j][1];
                arr[j][1] = arr[j+1][1];
                arr[j+1][1] = temp;
            }
        }
    }

    // 输出排序后的结果
    printf("\n排序后的坐标:\n");
    for (i = 0; i < n; i++) {
        printf("(%d, %d)\n", arr[i][0], arr[i][1]);
    }

    return 0;
}

代码关键部分讲解

  • 数组定义:int arr[100][2]; 直接满足你要求的最大[100][2]限制,每一行存储一组X、Y坐标
  • 输入校验:加了if (n > 100)判断,防止用户输入超过数组容量的数据,避免程序崩溃
  • 冒泡排序逻辑:
    • 外层循环控制排序的轮数,每轮会把当前最大的元素移到末尾
    • 内层循环负责相邻元素的比较和交换:如果当前坐标的X值比下一个大,就交换整个坐标对(X和Y都要交换,保证坐标配对正确)
  • 排序规则修改:如果想按Y坐标排序,只需要把排序时的判断条件arr[j][0] > arr[j+1][0]改成arr[j][1] > arr[j+1][1]就行

输入输出示例

输入

请问您要输入多少条数据?4
请输入第1条数据的X坐标:4
请输入第1条数据的Y坐标:4
请输入第2条数据的X坐标:3
请输入第2条数据的Y坐标:3
请输入第3条数据的X坐标:2
请输入第3条数据的Y坐标:2
请输入第4条数据的X坐标:1
请输入第4条数据的Y坐标:1

输出

排序后的坐标:
(1, 1)
(2, 2)
(3, 3)
(4, 4)

新手小贴士

  • 冒泡排序是入门级排序算法,核心就是相邻比较+交换,多走几遍就能把数组排好,很适合新手理解排序的基本逻辑
  • 输入数据时尽量保证是整数(代码里用的int类型),如果需要处理小数,可以把数组类型改成float或double,同时修改scanf和printf的格式符
  • 可以尝试给排序加个选择功能,让用户自己选按X还是Y坐标排序,比如用printf("请选择排序方式:1.按X坐标 2.按Y坐标")来实现

内容的提问来源于stack exchange,提问作者Chris G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:10:55