C语言实现输入数字排序去重功能及开发要点
### 思路分析 为了实现输入`n`个 1 - 1000 范围中的数,将它们从小到大排序并去重后输出的功能,可以采用以下步骤: 1. 读取输入的整数`n`,表示要输入的数字个数。 2. 读取`n`个 1 - 1000 范围内的整数。 3. 对这些整数进行排序。 4. 去除排序后数组中的重复元素。 5. 输出去重且排序后的结果。 ### 代码示例 ```c #include <stdio.h> // 交换两个整数的值 void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } // 冒泡排序函数 void bubbleSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { swap(&arr[j], &arr[j + 1]); } } } } // 去重函数 int removeDuplicates(int arr[], int n) { if (n == 0 || n == 1) { return n; } int j = 0; for (int i = 0; i < n - 1; i++) { if (arr[i] != arr[i + 1]) { arr[j++] = arr[i]; } } arr[j++] = arr[n - 1]; return j; } int main() { int n; // 读取输入的整数 n scanf("%d", &n); int arr[100]; // 读取 n 个整数 for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } // 对数组进行排序 bubbleSort(arr, n); // 去重 int newSize = removeDuplicates(arr, n); // 输出去重且排序后的结果 for (int i = 0; i < newSize; i++) { if (i > 0) { printf(" "); } printf("%d", arr[i]); } printf("\n"); return 0; } ``` ### 代码解释 1. **`swap`函数**:用于交换两个整数的值,通过指针操作实现。 2. **`bubbleSort`函数**:使用冒泡排序算法对数组进行排序,将数组元素从小到大排列。 3. **`removeDuplicates`函数**:遍历排序后的数组,去除重复元素,返回去重后数组的新长度。 4. **`main`函数**: - 读取输入的整数`n`和`n`个整数。 - 调用`bubbleSort`函数对数组进行排序。 - 调用`removeDuplicates`函数去重。 - 输出去重且排序后的结果。 ### 复杂度分析 - **时间复杂度**:排序操作的时间复杂度为$O(n^2)$,去重操作的时间复杂度为$O(n)$,因此总的时间复杂度为$O(n^2)$。 - **空间复杂度**:只使用了常数级的额外空间,空间复杂度为$O(1)$。 ### 进阶指南 - **性能优化**:可以使用更高效的排序算法,如快速排序、归并排序,将排序的时间复杂度降低到$O(n log n)$。 - **错误处理**:当前代码没有对输入进行有效性检查,如输入的`n`不在 1 - 100 范围内,或者输入的数字不在 1 - 1000 范围内。可以添加相应的输入验证代码。 - **扩展功能**:可以将代码封装成函数,方便在其他程序中复用。 ### 学习资源 - [C语言官方教程](https://www.learn-c.org/) - 《C Primer Plus》:一本经典的 C 语言入门书籍,适合初学者学习。 ### 开发建议 - 注重代码的可读性和可维护性,添加必要的注释。 - 对不同的功能进行模块化设计,如排序、去重等,提高代码的复用性。 - 进行充分的测试,确保代码在各种输入情况下都能正常工作。 ######[AI写代码神器 | 1051点数解答 | 2026-03-20 20:10:40]
- C++ 实现:精准统计给定范围 [L, R] 内数字 2 出现的次数及代码详解(字节豆包 | 401点数解答 | 2026-02-05 21:17:05)36
- C++实现:统计[L, R]范围内数字2出现的次数及代码详解(字节豆包 | 489点数解答 | 2026-02-07 17:12:26)41
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)341
- 工程师必知:软件系统用户文档编写九大要点揭秘(百度文心 | 350点数解答 | 2023-11-09 18:23:53)182
- 计算区间 n 到 m 中数字 x 出现次数的 Python 实现与详解(字节豆包 | 289点数解答 | 2025-12-07 17:14:59)70
- Python 实现:计算区间 n 到 m 中数字 x 出现的次数(字节豆包 | 322点数解答 | 2025-12-13 21:37:08)73
- Python:用正则表达式从含多种字符的字符串中提取英文、数字和中文单词(GPT | 522点数解答 | 2024-05-31 19:05:27)311
- Python:用正则表达式结合 split 思路提取一行字符串中的英文、数字和中文单词 (GPT | 399点数解答 | 2024-05-31 19:07:31)308
- 繁体字编码代码修改:人物名字合法性验证函数转简体版(字节豆包 | 325点数解答 | 2024-10-21 18:57:01)284
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)309
- C++ 实现:小 Q 送礼物之数字取余,开发中这 3 点要小心! (字节豆包 | 321点数解答 | 2025-11-05 18:39:56)111
- Python 实现:四位数重组求最大最小数差值(字节豆包 | 144点数解答 | 2026-02-01 12:49:54)23