概述
已知某个用户随意输入了n个数,我们需要对这n个数去重还要进行从小到大的排序,我们该怎么办呢?
我们分析一下这个问题,排序就不说了,任意一种排序算法都可以完成,关键就在于去重,这个该怎么办?
要先好好想想,是先去重再排序,还是先排序再去重?如果是前者,你会发现这个去重的工程量是非常大的,因为重复的数不在一块儿,程序需要通过遍历来慢慢找。那如果是后者,你就会发现去重的工程量会大大减小,因为先经过了排序之后,所有数都按照从小到大的顺序排列好了,重复的数都挨在一块儿,你只需要判断前一个数和后一个数是否相同就可以得出是否是重复数了。
好,有了这个思路,那么就开始上代码了。这里我用的是DevC++编写的代码,如果你用其它的编译器来进行编译出错的话,主要就是main函数的写法规范不同,简单修改一下就可以正常运行了。
#include<stdio.h>
#define N(x) x
/*这上面宏定义了一个带参数
的常量,后面需要用它来
给数组确定长度
*/
main()
{
/*定义一个n用来储存数组长度
定义一个t作为冒泡排序的交换量
定义i和j来作为循环控制变量
*/
int n,t,i,j;
scanf("%d",&n); //输入随机数的个数
int a[N(n)]; //定义数组 ,确定长度为n
//输入n个随机数
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
//冒泡排序,将数组按照从小到大的顺序排列
for(i=0;i<n;i++){
for(j=0;j<n-i-1;j++){
if(a[j]>a[j+1]){
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
}
int num;//定义一个num变量来储存数组中第一次出现的数
/*这一步是输出去重后的结果
*/
for(i=0;i<n;i++){
/*
如果数组下标是0,那么就
直接记录a[0]的值并输出。
*/
if(i==0){
num=a[0];
printf("%d ",num);
}else{
/*如果a[i]的值等于num的值,
说明是重复的,则跳过本次循
环;如果不相等,就说明a[i]
的值是第一次出现,那么就记录
下a[i]的值,并输出num
*/
if(a[i]==num){
continue;
}else{
num=a[i];
printf("%d ",num);
}
}
}
}
如果懒得写代码,没关系,我们来看看测试结果。
再试一次看看
可以看到这样不仅实现了排序,还实现了去重。
另外注明一下哈,这是我自己想到的算法,代码都是按照自己的思路来写的,,肯定会有其它更佳的算法,因此我的算法仅供参考。
最后
以上就是风中保温杯为你收集整理的【C语言】对输入的若干个数去重并排序的算法的全部内容,希望文章能够帮你解决【C语言】对输入的若干个数去重并排序的算法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复