c语言 输入N个无序的数,请将相同的数删成只剩下一个,并将删除后的数列从小到大排序后输出。(如输入:8 32 12 25 12 8 36 25 26 12 ,输出:8 12 25 26 32 36)
时间: 2024-03-04 17:48:51 浏览: 111
好的,这个问题可以用数组和快速排序算法来解决。具体步骤如下:
1. 首先,遍历输入的数列,将每个数作为数组的一个元素,加入数组中。
2. 对数组进行快速排序,将相同的数排在一起。
3. 遍历排序后的数组,将重复的数删除,只保留第一个数。
这样,就能得到删除重复数后的有序数列。下面是具体的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
int remove_duplicates(int nums[], int n) {
int i, j;
for (i = 0, j = 0; i < n; i++) {
if (nums[i] != nums[j]) {
j++;
nums[j] = nums[i];
}
}
return j + 1;
}
int main() {
int n, i, len;
scanf("%d", &n);
int nums[n];
for (i = 0; i < n; i++) {
scanf("%d", &nums[i]);
}
qsort(nums, n, sizeof(int), compare);
len = remove_duplicates(nums, n);
for (i = 0; i < len; i++) {
printf("%d ", nums[i]);
}
return 0;
}
```
示例输入:`10 8 32 12 25 12 8 36 25 26 12`,输出:`8 12 25 26 32 36`。
需要注意的是,这里只是给出了一种可能的实现方式,实际上还有很多其他的方法可以解决这个问题,比如哈希表、二叉搜索树等。
阅读全文