大家好,又见面了
1.回顾
2.排序讲解
3.代码
1.回顾
我们简单回顾一下上次的内容
1.归类(插旗子类型)
归类是将输入的每一个数,加入相应的cnt里进行计数
首先定义一个存放计数的cnt数组
int cnt[数组长度];//数组长度自己定
接下来我们定义一个数字个数,和一个变量来接收每一个输入的数
int n,x;
接下来读取个数
cin>>n;
知道了个数,我们可以开始输入每一个数字了
for(int i=1;i<=n;i++){
cin>>x;//读取数字
cnt[x]++;//对应的cnt进行计数
}
最后用for输出
这里假设有10个班级
for(int i=1;i<=10;i++){
cout<<cnt[i]<<endl;
}
2.统计类型
这个没什么好讲的
大家看
for(int i=1;i<=n;i++){
cin>>x;
cnt[x]++;
}
这是刚才计数的代码
现在我们要统计个数,也要用到
这种方法。但是统计时虽然统计了数,但在输出时却找不到该输出cnt多少
显然,数组这时派上了用场
int a[数组长度];//数组范围自己定
我们把所有的x都替换成a[i]
好了这是上次讲的2种类型的汇总
好了,切入正题
2.排序
好,大家想想排序的原理
前面的选择排序是一个个的打位置,用maxn或一个p
这个桶排序就是一个新的理念了
开始先统计数字【上次讲过了怎么写了】
桶排序用for来从数字范围的最大值,一直到1来统计数字
在for里要加一个if(cnt[i]!=0)这样说明是有数字,是这个数的
因为我们的for是按从小到大或从大到小。这样,就能准确的来按顺序排序了
这样在if表达式成立后及直接输出就行了
3.代码
最后把代码留给大家,后面有备注,可查看
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<bits/stdc++.h>
#include<string>
#include<math.h>
using namespace std;
int main(){
int n,cnt[1010]={0},x;//n是数字个数,cnt是用来确定这个i是否是输入进去的数【数组范围自己定,一般看数字最大范围】,x是每一个输入进去的数
cin>>n;//输入数字个数
for(int i=1;i<=n;i++){//输入每一个数及计数的for循环
cin>>x;//输入每一个数
cnt[x]++;//对应的计数器++,用来后面确认数字用
}//for结束循环
for(int i=1;i<=1001;i++){//i到n的最大值的范围,也是数字最大范围【这个是从小到大输出,所以排序输出中也是】
if(cnt[i]!=0){//输入过这个数
cout<<i<<" ";//输出这个数,【这个数是i】别忘了打空格或换行
}
}
return 0;
}
🎇🎇🎇🎇祝大家健康,再见🎇🎇🎇🎇