开篇
之后的几天里,我想通过实现几个经典算法来联手,逐渐熟练用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 条评论) “” |