C语言中如何提取唯一元素生成新数组并进行升序排序?
去除数组重复元素并生成可排序新数组的解决方案
你当前的代码已经能识别并打印数组中的唯一元素,但没有将这些元素保存为可用于后续排序的新数组。下面是修改后的完整实现,包含去重、生成新数组以及升序排序的功能:
完整代码
#include <stdio.h> // 去重:将原数组中的唯一元素存入新数组,返回新数组的元素个数 int removeDuplicates(double arr[], int n, double uniqueArr[]) { int i, j, count = 0; for (i = 0; i < n; i++) { // 检查当前元素是否已存在于结果数组中 int isDuplicate = 0; for (j = 0; j < count; j++) { if (arr[i] == uniqueArr[j]) { isDuplicate = 1; break; } } // 不存在则添加到新数组 if (!isDuplicate) { uniqueArr[count++] = arr[i]; } } return count; } // 冒泡排序:对double数组进行升序排序 void bubbleSort(double arr[], int n) { int i, j; double temp; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } int main() { double arr[100], uniqueArr[100]; int n, uniqueCount; printf("Input the number of elements to be stored in the array: "); scanf("%d", &n); printf("Enter the elements:\n"); for (int i = 0; i < n; i++) { printf("element - %d : ", i); scanf("%lf", &arr[i]); } // 执行去重,得到无重复的新数组和其长度 uniqueCount = removeDuplicates(arr, n, uniqueArr); // 对新数组进行升序排序 bubbleSort(uniqueArr, uniqueCount); // 输出最终结果 printf("\n去重并升序排序后的数组:\n"); for (int i = 0; i < uniqueCount; i++) { printf("%.2f ", uniqueArr[i]); } return 0; }
关键改进点说明
- 生成新数组:新增
removeDuplicates函数,通过遍历原数组并检查元素是否已存在于结果数组,将唯一元素存入uniqueArr,同时返回新数组的元素个数(因为去重后长度会小于等于原数组)。 - 独立排序功能:拆分出
bubbleSort函数专门处理排序,针对double类型数组实现升序排列,逻辑清晰且复用性强。 - 流程解耦:将输入、去重、排序、输出拆分为独立步骤,避免原代码中输入与去重打印混在一起的问题,更便于后续扩展。
内容的提问来源于stack exchange,提问作者annnna
相关产品推荐
相关产品推荐

