删重排序
删重排序有两种方法:
1.先排序后删重
2.先删重后排序
题目:有n个同学参与调查(n≤100),每个同学说一个号码(1~1000),要求去掉重复的号码并从小到大排序。
1.先去重后排序
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,a[1001],k,n,t;
printf(“请输入调查人数:”);
scanf("%d",&n);
for(i=0;i<1000;i++)
a[i]=0; //初始化
for(i=1;i<=n;i++) //将输入数据放"桶"里
{
scanf("%d",&t);
a[t]=1;
}
for(i=1;i<=1000;i++) //打印有数据的桶
{
if(a[i]==1)
printf("%d ",i);
}
return 0;
}
心得:这种方法的亮点在于桶的数据固定性,多种重复数据放一个桶内可以只打印一个数据,关键代码为令桶赋值1,随后只需打印值为1的桶下标即可实现去重操作。
2.先排序后去重
去重代码:
printf("%d",a[0]);
for(i=1;i<=n;i++)
{
if(a[i]!=a[i-1])
{
printf("%d",a[i);
}
}
心得:若先排序后去重,那么相同的元素将会左右相邻,如:1 1 2 4 5 5 5 7,所以只需判断后一个值不等于前一个值时打印即可。