声明:本人学信竞半年不到,用的方法很逊,思路也很基本
希望大佬批评指正
一.桶排序
举一个非常离谱的例子,你面前有十个按顺序标了1~10的桶,你手上有5个带有序号的小球。现在你要把这些小球按序号放在桶里,你会怎么做?
你现在拿到了一个编号为1的小球,你把它放在编号为1的桶里,像这样
你拿到了一个编号为7的小球,你又把它放进对应的桶里,像这样
如此往复两次你拿到了两个小球,一个是6号一个是8号,像这样
这时候你又拿到了一个编号为7的球(内心:终于到最后一个了,于是这个图变成了这样
至此你的小球放完了,接下来你又要按编号从小到大的顺序把每个球拿出来,并且还要记录每个球所对应的桶的编号(内心:??
你从1号里拿出了1个球,从6号里拿出了1个,从7号里拿出了2个,从8号里拿出了1个,整个过程可以可以这么描述
这个时候球的顺序已经按编号排好了,你的事情也干完了(不容易
其实这个过程就是类比于桶排序。(真正的桶排序比这个难一些,这个是简易版的)它的基本方法就是,开很多很多个桶(就是数组)然后把待排序的数放在对应的数组元素里,比如1放在a[1]里,5放在a[5]里。最后按你需要的顺序输出数组里出现过的下标,整个排序过程结束
代码如下
#include <bits/stdc++.h>
using namespace std;
const int MAXN=1001;
int a[MAXN];//建立很多的桶
int n,t;//n为待排序的数的个数 t为待排序的数
int main()
{
cin>>n;
for(int i=1;i<=n;i&