实现冒泡排序算法-Python

开篇

之后的几天里,我想通过实现几个经典算法来联手,逐渐熟练用Python编程,顺便也把这么多年荒废的算法知识捡起来。

今天的目标是实现冒泡排序算法,思路如下:

手动输入一串数字,数量不限,最后输出排序后的数列。


关于冒泡排序算法

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。


代码

# 手动输入数列
def main():
    text = input("请输入整数数列,以空格隔开>>
")
    type = int(input("升序排列请输入1,降序排列请输入2>>
"))
    nums = text.split() #将字符串转为数组
    orderNums = maopao(nums,type)
    print("排序后的数列:",orderNums)

# 冒泡算法
def maopao(nums,type):
    for i in range(len(nums)-1): #控制比较次数
        for k in range(len(nums)-i-1):
            if  type == 1:
                if int(nums[k]) > int(nums[k+1]):
                    nums[k],nums[k+1] = nums[k+1],nums[k]
            else:
                if int(nums[k]) < int(nums[k+1]):
                    nums[k],nums[k+1] = nums[k+1],nums[k]

    return nums

# 运行主程序
main()

总结

知识点总结:

1. 将字符串转为数组的方法:split(),默认是以空格为分隔符,可以直接指定分隔符;


2. 测试时发现两位数的数字是按照字符串比较大小进行的排序,发现:split()转换成的数组中,每一个格存储的是字符串类型,所以在用数值进行比较时,需要int()转换类型;


3. 冒泡算法两重循环,第一层循环控制比较次数,第二层控制两个值比较;


4. 交换两个变量的值的方法:

(1) 用第三个变量帮助:t = a; a = b; b = t;

(2) Python独有,元组方式进行交换:a,b = b,a


5. for 循环,反向循环方法: for i in range(3,0,-1) range默认正向循环,第三个参数为-1时,反向循环。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章