c语言删除重复数字的方法
时间: 2024-10-12 12:07:13 浏览: 35
在C语言中删除数组中的重复数字,有几种常见的方法:
1. **哈希表法**:
使用一个哈希表(如`size_t count[256]`假设我们处理的是0到255范围内的整数),遍历数组,如果当前元素不在哈希表中,则添加并更新其计数;如果已经在表中,则跳过。最后遍历一遍哈希表,只保留计数为1的元素。
```c
#include <stdio.h>
#define SIZE 100
void removeDuplicates(int arr[], int n) {
size_t count[SIZE] = {0};
for (int i = 0; i < n; i++) {
if (count[arr[i]] == 0) {
count[arr[i]] = 1;
// 或者直接复制非重复元素到新位置,避免原地修改
// printf("%d ", arr[i]);
}
}
// 输出非重复数组
for (int i = 0; i < SIZE; i++) {
if (count[i] > 0) {
printf("%d ", i);
}
}
}
int main() {
int arr[] = {1, 2, 2, 3, 4, 4, 4, 5, 6, 6};
int n = sizeof(arr) / sizeof(arr[0]);
removeDuplicates(arr, n);
return 0;
}
```
2. **排序法**:
先对数组进行排序,然后遍历一次,相邻的两个元素如果相等就去掉其中一个。
```c
#include <stdio.h>
#include <stdlib.h>
void removeDuplicates(int arr[], int n) {
qsort(arr, n, sizeof(int), compare); // 对数组进行排序
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; // 更新新的数组长度
// 输出去重后的数组
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
}
// 比较函数,用于qsort
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int arr[] = {1, 2, 2, 3, 4, 4, 4, 5, 6, 6};
int n = sizeof(arr) / sizeof(arr[0]);
removeDuplicates(arr, n);
return 0;
}
```
注意,以上两种方法都改变了原数组,如果你需要保持原始数组不变,可以选择使用动态内存分配或额外的辅助数组。
阅读全文