首先,桶排序是一种简单并且运行快的一种排序。
第一步,对五个数进行排序。程序如下:
#include<iostream>
using namespace std;
int main()
{
int a[100];
int t;
for(int i=1; i<=10; i++)
{
a[i]=0;
}//首先对数组进行归零
for(int j=1; j<=5; j++)
{
cin>>t;
a[t]++;
}//将输入的数的个数存入数组中。
for(int k=1; k<=10; k++)
{
for(int d=1; d<=a[k]; d++)
{
if(k==1)
cout<<k;
else
cout<<" "<<k;
}
}//将数组进行输出。
return 0;
}
运行原理:桶排序,就是先把所有可能的数全部摆出,然后设定一个数,这个数必须大于等于输入数的最大值。然后如果有重复的数,数组的值就在原来的基础上加1.
输出的时候如果这个数对应的数组的值不为零,就将这个数输出,个数等于对应数组的大小。
如果是输入未知个数的话,程序如下:
#include<iostream>
using namespace std;
int main()
{
int a[1000];
int n;
int t;
cin>>n;
for(int i=1; i<=100; i++)
{
a[i]=0;
}
for(int j=1; j<=n; j++)
{
cin>>t;
a[t]++;
}
for(int g=1; g<=100; g++)
{
for(int s=1; s<=a[g]; s++)
{
cout<<g<<" ";
}
}
return 0;
}
打完这些之后,感觉出了桶排序的一些弊端。1,只有在确定最大数的大小时,才能进行定义。如果输入的一个数大于1000,那么时数组为零时,就至少需要定义a[1001]为零。
如果时不知道数的大小时,就可以根据题目要求确定数组归零时的数组个数。(打到这里觉得这个也可以避免,因为做题时题目一般会给出数的范围emmmmmm)。
如果给出的数的范围太大,可以在定义数组时,在main函数外面定义,因为main函数是有内存的,如果定义数组在外面,数组的运行就不会受到main函数的影响。
2,在防止PE错误时不太好避免,因为无法确定第一个输出的数的大小。