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
相关产品推荐
相关产品推荐

