输入N个无序的数,请将相同的数删成只剩下一个,并将删除后的数列从小到大排序后输出。(如输入:8 32 12 25 12 8 36 25 26 12 ,输出:8 12 25 26 32 36) 用c语言实现
时间: 2024-03-09 22:45:54 浏览: 10
好的,可以用哈希表来实现这个功能。具体步骤如下:
1. 定义一个哈希表,将输入的数作为键,将其出现的次数作为值。
2. 遍历哈希表,将出现次数大于等于1的键值对的键存入一个数组中。
3. 对这个数组进行从小到大排序。
4. 输出排序后的数组。
下面是C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 10000
void hash(int *nums, int n, int *hash_table) {
for (int i = 0; i < n; i++) {
hash_table[nums[i]]++;
}
}
void remove_duplicates(int *nums, int n) {
int *hash_table = (int *)calloc(MAX_NUM, sizeof(int));
hash(nums, n, hash_table);
int *unique_nums = (int *)malloc(n * sizeof(int));
int k = 0;
for (int i = 0; i < MAX_NUM; i++) {
if (hash_table[i] >= 1) {
unique_nums[k++] = i;
}
}
free(hash_table);
qsort(unique_nums, k, sizeof(int), [](const void *a, const void *b) -> int {
return *(int *)a - *(int *)b;
});
for (int i = 0; i < k; i++) {
printf("%d ", unique_nums[i]);
}
free(unique_nums);
}
int main() {
int nums[] = {8, 32, 12, 25, 12, 8, 36, 25, 26, 12};
int n = sizeof(nums) / sizeof(int);
remove_duplicates(nums, n);
return 0;
}
```
输出结果为:8 12 25 26 32 36。
注意:这里使用了Lambda表达式来作为排序函数,需要在编译时指定C++11标准,否则会编译错误。