基于python的简单桶排序、冒泡排序

先把学习的网站贴出来: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=" ")

 

代码写的不好,反正意思就是这么个意思,我会继续改进的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值