先把学习的网站贴出来:http://blog.51cto.com/ahalei 这里特别生动形象的讲述了常用算法的原理。
先说桶排序,用一个一维数组(列表)就可以完成。
顾名思义,桶。想象一下有好多个有编号的桶摆在你面前。编号为 0、1、2、3、4、5、6、7、8、9、10
要排序的数字恰巧包含在桶的编号当中。假如要排序的数字为:5、2、7、2、3
第一个数字是5,就往编号为5的桶里放入一面小红旗。
第二个数字是2,就往编号为2的桶里放入一面小红旗。
以此类推。。。
最后,0、1、4、5、8、9、10号桶里没有棋。2号桶里两面旗,3号5号7号桶里各一面旗。
由大到小排序就是输出桶编号,有几面旗子就输出几次。
代码:
“””
author:Lvxueqinga
date:2018/8/16
“””
#简单的桶排序从大到小输出:简单、浪费空间、不支持小数、负数
#对0-10之间的数字进行排序
#利用一维数组tong_ary[],数组初始化为0
#如果输入5,则数组索引为5的地方加1
tong_ary=[0,0,0,0,0,0,0,0,0,0,0]
for i in range(0,11):
n=int(input(“请输入数:”))
tong_ary[n]=tong_ary[n]+1
for j in range(10,-1,-1):
while tong_ary[j] > 0:
print(j,end=’ ‘)
tong_ary[j]=tong_ary[j] – 1
#去重后从小到大输出:
#for j in range(0,11):
# if tong_ary[j] > 0:
# print(j,end=’ ‘)
接着是冒泡排序。我这里也是从大到小排序
一串数字:9、2、1、6、3、5
以下把最小的数字排到后面算为一趟
第一趟:9和2比较,2<9,不用变化;
2和1比较,不用变化;
1和6比较,1<6, 交换1和6: 9、2、6、1、3、5
交换1和3: 9、2、6、3、1、5
交换1和5: 9、2、6、3、5、1
第一趟结束,1是这一组数中最小的排到了最后。
在第二趟中,找到的最小数放到倒数第二位即可,不需要在和最后一位比较
同理在第三趟中,找到的最小数放到倒数第三位即可。
代码:
“””
author:Lvxueqinga
date:2018/8/16
“””
#冒泡排序
#对于桶排序来讲支持小数、负数,简单,效率不高
n=int(input(“想给几个数进行排序?”))
bubbling_ary=[]
count=n #用来记录每趟完成后少比较交换一位
for i in range(0,n):#把数字存进数组里
num=input(“输入数吧!”)
bubbling_ary.append(num)
while count>1 :
j=1
#j从1开始,与j-1比较,如果从零开始的话j=n-1的时候j+1越界
while j < count:
if bubbling_ary[j-1] < bubbling_ary[j]:
temp=bubbling_ary[j]
bubbling_ary[j]=bubbling_ary[j-1]
bubbling_ary[j-1]=temp
j=j+1
else:
j=j+1
count=count-1
for k in range(0,n):
print(bubbling_ary[k],end=” “)
代码写的不好,反正意思就是这么个意思,我会继续改进的