一组无序重复数,去掉重复数,仅留一个,用C语言写
时间: 2024-09-13 08:06:06 浏览: 35
在C语言中,要去掉一组无序重复数中重复的数字,只留下一个,可以采用多种方法。这里我提供一种基本的方法,使用数组和排序结合的思路。首先,将数组中的元素排序,然后遍历数组,比较相邻元素,如果相同就移除重复的元素。
以下是一个简单的示例代码,演示了如何实现这一过程:
```c
#include <stdio.h>
#include <stdlib.h>
// 函数原型声明
void removeDuplicates(int *arr, int n);
void sortArray(int *arr, int n);
int main() {
int arr[] = {4, 2, 2, 3, 3, 1, 5, 5, 5};
int n = sizeof(arr) / sizeof(arr[0]);
// 先对数组进行排序
sortArray(arr, n);
// 去除重复的数字
removeDuplicates(arr, n);
// 打印去重后的数组
for(int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
// 排序函数,这里使用简单的冒泡排序
void sortArray(int *arr, int n) {
int i, j, 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;
}
}
}
}
// 去重函数,排序后遍历数组移除重复项
void removeDuplicates(int *arr, int 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]; // 添加最后一个元素,因为最后一个元素不会与后面比较
// 更新数组的大小
n = j;
// 如果你想要数组的大小与实际存储的元素数量一致,你需要重新分配内存
// int *newArr = realloc(arr, sizeof(int) * n);
// if (newArr != NULL) {
// arr = newArr;
// } else {
// // 处理错误情况
// }
}
```
注意:上述代码中的 `removeDuplicates` 函数是就地进行去重,如果需要得到一个大小不同的数组,需要在函数中重新分配内存。