假如你有7个数需要排序,最大的数为100,那么你就需要101个桶,桶的编号为0-100。你的数列中的数是多少,就往对应的桶里面加一,最后按照顺序打印桶的编号即可。但此排序方式浪费资源极大,数据量大的时候不建议使用,本文只是介绍最基本的算法实现原理,作为入门使用。
class Solution():
'''
对输入的列表进行排序
桶排序
'''
def paixu(self, x):
#读取数列中的最大数,从而知道需要几个桶
max_num = max(x)
#a作为桶来记录对应数值的多少
a = list()
#用来记录桶的编号,便于打印数字
m = -1
#将所有桶清空,共需要max_num+1个桶
for i in range(max_num+1):
a.append(0)
#如果痛的编号与给入的数值相等,则将桶内的数字加一
for j in range(max_num+1):
for item in x:
if j == item:
a[j] += 1
#将桶内的数字打印
for i_j in a:
m += 1
for j_i in range(i_j):
print(m)
if __name__ == "__main__":
a = Solution()
a.paixu([0,4,100,6,9,5,4,20])
本文是借鉴《啊哈!算法》,将其用c语言实现的代码转换为Python来实现,附上c语言代码,输入数据为5,3,5,2,8
#include <stdio.h>
int main()
{
int a[11],i,j,t;
for(i=0;i<=10;i++)
a[i]=0; //初始化为0
for(i=1;i<=5;i++) //循环读入5个数
{scanf("%d",&t); //把每一个数读到变量t中
a[t]++; //进行计数
}
for(i=0;i<=10;i++) //依次判断a[0]~a[10]
for(j=1;j<=a[i];j++) //出现了几次就打印几次
printf("%d ",i);
getchar();getchar();
//这里的getchar();用来暂停程序,以便查看程序输出的内容
//也可以用system("pause");等来代替
return 0;
}