1、需求
现在有一串数字,要你排序输出,如果有重复,值显示一次。
2、思路
有两种方式:在输入的时候去重;在排序的时候去重。
3、代码
这里咱们用之前博客写过的桶排序来显示输入去重,冒泡、快速排序来实现输出去重。输出去重,咱们这里只写一个冒泡排序,输出都一样,关键在于排序。
桶排序去重:
#include <stdio.h>
int main(){
int a[101],n,i,j;
//初始化数组,为数组赋值为0
for(i=0;i<101;i++){
a[i]=0;
}
printf("请输入要排序的数字个数:");
scanf("%d",&n);
printf("\n");
//去掉重复的,每次赋值为1
for(i=0;i<n;i++){
scanf("%d",&j);
a[j]=1;
}
//开始输出
for(i=0;i<101;i++){
// if(a[i]==1){
// printf("%d ",i);
// }
for(j=1;j<=a[i];j++){
printf("%d ",i);
}
}
return 0;
}
冒泡排序输出去重:
#include <stdio.h>
int main(){
int a[20],i,j,n,t;
printf("请输入你要排序的数字个数:");
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
//冒泡排序
//外层循环控制趟数
for(i=0;i<n-1;i++){
for(j=0;j<n-i-1;j++){
if(a[j]<a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
// for(i=0;i<n;i++){
// printf("%d ",a[i]);
// }
//输出时去重
for(i=0;i<n;i++){
if(a[i]!=a[i+1]){
printf("%d ",a[i]);
}
}
return 0;
}
上面两种方法结果: