C语言删除数组中的重复元素
时间: 2024-12-14 10:05:18 浏览: 11
在C语言中,删除数组中的重复元素通常涉及到数据结构的知识,特别是集合数据结构,如哈希表或排序算法,因为直接遍历数组并删除重复元素可能会导致数组越界等问题。这里提供一种简单的方法,即先对数组排序,然后再逐步移除重复项:
```c
#include <stdio.h>
#include <stdlib.h>
// 使用快速排序作为例子,这里只做升序排列,删除重复元素
void quicksort(int arr[], int low, int high) {
if (low < high) {
int pivot = partition(arr, low, high);
quicksort(arr, low, pivot - 1);
quicksort(arr, pivot + 1, high);
}
}
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j <= high - 1; j++) {
if (arr[j] < pivot) {
i++;
// 交换arr[i] 和 arr[j]
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 将pivot放到其最终位置
int temp = arr[i + 1];
arr[i + 1] = arr[high];
arr[high] = temp;
return (i + 1);
}
// 删除数组中的重复元素,并返回新的长度
size_t remove_duplicates(int arr[], size_t len) {
size_t n = sizeof(arr) / sizeof(arr[0]);
quicksort(arr, 0, n - 1);
size_t index = 1;
for (size_t i = 1; i < n; i++) {
if (arr[i] != arr[i - 1]) {
arr[index++] = arr[i];
}
}
arr[index] = '\0'; // 或者根据实际需求设置最后一个元素
return index;
}
int main() {
int arr[] = {1, 2, 2, 3, 4, 4, 4, 5};
size_t new_len = remove_duplicates(arr, sizeof(arr) / sizeof(arr[0]));
printf("Sorted array with duplicates removed: ");
for (size_t i = 0; i < new_len; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
这个示例首先对数组进行了排序,然后遍历数组,在新数组`arr[index]`的位置存储不同的值,直到所有不同的元素都添加完毕。
阅读全文