如何编写main函数对排序算法进行t次测试用例验证?
搞定多测试用例的Main函数编写
嘿,我来帮你完成这个main函数的编写,完美适配你已经实现的插入排序sort函数。下面是完整的解决方案,包含代码和关键细节解释:
整体思路
我们需要完成的流程很清晰:
- 先读取测试用例的总数
t - 循环
t次,每次处理一个测试用例:- 读取当前数组的大小
n - 读取
n个整数存入数组 - 调用你已经实现的
sort函数对数组排序 - 按要求格式输出排序后的数组(元素空格分隔,每个测试用例结果换行)
- 读取当前数组的大小
完整代码实现
#include <stdio.h> // 这是你已经实现的插入排序函数(这里我写了一个标准实现作为示例) void sort(int arr[], int n) { int i, key, j; for (i = 1; i < n; i++) { key = arr[i]; j = i - 1; // 将比key大的元素向后移动 while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j = j - 1; } // 插入key到正确位置 arr[j + 1] = key; } } int main() { int test_count; // 读取测试用例总数 scanf("%d", &test_count); // 遍历每个测试用例 while (test_count--) { int arr_size; scanf("%d", &arr_size); // 变长数组存储元素(C99及以上支持,兼容性好) int arr[arr_size]; // 读取数组的所有元素 for (int i = 0; i < arr_size; i++) { scanf("%d", &arr[i]); } // 调用你的插入排序函数 sort(arr, arr_size); // 输出排序后的数组,处理空格避免尾部多余空格 for (int i = 0; i < arr_size; i++) { if (i != 0) { printf(" "); } printf("%d", arr[i]); } // 每个测试用例输出后换行 printf("\n"); } return 0; }
关键细节说明
- 输入处理:
scanf("%d")会自动跳过所有空白字符(空格、换行、制表符),所以完全适配题目给出的输入格式,不用额外处理换行问题。 - 数组存储:代码里用了变长数组(VLA)
int arr[arr_size],这是C99标准支持的特性,大多数现代编译器(GCC、Clang等)都支持。如果你的编译器不支持VLA,可以改用动态内存分配:int *arr = (int*)malloc(arr_size * sizeof(int)); // 使用完数组后记得释放内存,避免内存泄漏 free(arr); - 输出规范:通过判断
i != 0来添加空格,确保第一个元素前没有空格,最后一个元素后也不会多出来空格,输出格式更严谨。 - 测试用例循环:用
while(test_count--)的写法比for循环更简洁,每次循环后测试用例数减1,直到为0停止。
测试示例
比如输入题目给出的测试用例:
2 7 9 7 5 9 2 20 3 3 10 2 5
程序会输出:
2 3 5 7 9 9 20 2 5 10
完全符合要求!
内容的提问来源于stack exchange,提问作者Harsh Yadav
相关产品推荐
相关产品推荐

