C/C++二维数组升序排序及2x2网格输出问题求助
修正C语言排序算法并实现2x2网格输出
Hey there! Let's fix up your sorting code and get that 2x2 grid output working properly. Since you're new to C/C++, I'll break this down with a complete, working example and explain each part clearly.
First, here's the full corrected code that includes a separate input function, a working sort, and 2x2 grid output:
#include <stdio.h> // 单独的数组输入函数 void inputArray(int arr[], int size) { printf("请输入%d个整数:\n", size); for (int i = 0; i < size; i++) { scanf("%d", &arr[i]); } } // 升序排序函数(新手友好的冒泡排序) void sortArray(int arr[], int size) { for (int i = 0; i < size - 1; i++) { for (int j = 0; j < size - i - 1; j++) { // 如果当前元素大于下一个,交换位置 if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } // 2x2网格形式输出数组 void print2x2Grid(int arr[]) { printf("\n升序后的2x2网格:\n"); for (int i = 0; i < 4; i++) { printf("%d\t", arr[i]); // 每2个元素换行,形成2列 if ((i + 1) % 2 == 0) { printf("\n"); } } } int main() { // 2x2网格对应4个元素,定义固定大小的数组 int array[4]; // 调用输入函数填充数组 inputArray(array, 4); // 调用排序函数完成升序排序 sortArray(array, 4); // 调用网格输出函数展示结果 print2x2Grid(array); return 0; }
关键修正和新手注意点:
- 输入函数拆分:把输入逻辑独立成函数,让代码结构更清晰,也方便后续复用。
- 排序逻辑修正:
- 新手常写错冒泡排序的循环边界(比如漏掉
size - i - 1),这会导致重复比较已排好序的元素,甚至输出混乱。 - 交换元素必须用临时变量
temp,直接赋值会覆盖原有数据,这是排序失败的高频原因。
- 新手常写错冒泡排序的循环边界(比如漏掉
- 2x2网格输出:通过
(i + 1) % 2 == 0判断换行时机,每输出2个元素就切换到下一行,刚好形成2行2列的网格结构。
测试示例:
如果输入:3 1 4 2,程序会输出:
升序后的2x2网格: 1 2 3 4
要是你原来用的是其他排序算法(比如选择排序),可以把具体代码贴出来,我再帮你针对性调整!
内容的提问来源于stack exchange,提问作者Chris G
相关产品推荐
相关产品推荐

