Python实现经典算法之排序1:冒泡排序

有一串数字:78, 33, 82, 37, 52, 28, 99, 77,我们希望它们能按照从小到大的顺序排列,那么应该如何用Python实现呢?这好比有几个个子高矮不等的同学在排队照相,指挥的老师会从最左边让第一个同学和第二个同学比较高矮,如果左边比右边的高,那么高的同学和矮的同学交换一下位置。然后矮的同学变成左边第一个,刚才高的同学就和第三个同学再比高矮,如果比第三个还高,就继续和第三个交换,以此类推。这样的排序方法就是:冒泡排序。因为不停地在比较,也叫比较排序。


Python实现经典算法之排序1:冒泡排序

代码解析:

def bubble_sort(nums) 定义一个名为bubble_sort的函数,对从传入的参数nums即一个数字列表进行处理

for i in range(len(nums)-1): 比较的次数,因为:3个需要比较2次,4个需要比较3次,所以len(nums)个就需要len(nums)-1次[len()函数用于统计列表中元素的个数]

for j in range(len(nums)-i-1): j表示第几个数字,len(nums)-i-1 表示需要比较的次数。


找规律:假如有5个数字,分别有第0个,1个,2个...,4个元素 5:len(nums)

0 1 2 3 4 第0个 需要比较:4次(分别和第1,2,3,4比较) 5 - 1 5 - i -1 5-0-1

0 1 2 3 4 第1个 需要比较:3次(分别和第2,3,4比较) 5 - 2 5 - i -1 5-1-1

0 1 2 3 4 第2个 需要比较:2次(分别和第3,4比较) 5 - 3 5 - i -1 5-2-1

所以得出结论:第i个元素,需要比较 len(nums) - i - 1

if nums[j] > nums[j+1]: 如果第j个数字 大于 第 j+1个数字 也就是说 左边的数字大于右边的数字

nums[j], nums[j+1] = nums[j+1], nums[j] 那么第j个数字就和第j+1个数字调换位置

return nums 返回排序完成的列表nums


开始排序:

print(bubble_sort([78, 33, 82, 37, 52, 28, 99, 77]))

结果:

Python实现经典算法之排序1:冒泡排序

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

相关文章

推荐文章