我正在尝试了解有关算法的更多信息,并且正在研究气泡排序算法。我在github上找到了它的脚本,但我无法真正理解它。我是python的新手,所以有人可以向我解释此脚本中发生了什么。
from __future__ import print_function
def bubble_sort(arr):
n = len(arr)
# Traverse through all array elements
for i in range(n):
# Last i elements are already in place
for j in range(0, n-i-1):
# traverse the array from 0 to n-i-1
# Swap if the element found is greater
# than the next element
if arr[j] > arr[j+1] :
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
if __name__ == '__main__':
try:
raw_input # Python 2
except NameError:
raw_input = input # Python 3
user_input = raw_input('Enter numbers separated by a comma:').strip()
unsorted = [int(item) for item in user_input.split(',')]
print(*bubble_sort(unsorted), sep=',')
答案 0 :(得分:2)
将数组可视化为数字的垂直列表,第一个元素(索引为0)在底部,最后一个元素(索引为n-1)在顶部。冒泡排序的想法是使数字“冒泡”到顶部,进入它们所属的位置。
例如,[2,3,1]首先将看2和3,而不做任何事情,因为它们已经按顺序排列。然后将看3和1,因为3> 1交换它们,得到[2,1,3]。然后我们通过查看2和1进行重复,从2> 1开始交换它们以获得[1,2,3],这是有序的。
这个想法是先将“ 3”然后是“ 2”冒泡到正确的位置。
请注意,在3冒泡之后,我们不必比较2和3,因为我们知道最后一个元素已经比之前的所有元素都高。通常,在i
个冒泡排序迭代之后,不需要比较最后的i
个元素。
答案 1 :(得分:1)
from __future__ import print_function
在这里,我们实质上是引入别人编写的代码,以便我们可以使用它。
def bubble_sort(arr):
这是一个函数定义。函数定义前面带有关键字def
。接下来是函数的名称。在这种情况下,它称为bubble_sort
。括号中的内容称为 parameters 。 参数是我们提供给函数的东西,以便函数可以使用它,例如,将参数乘以数字,排序列表或将一些信息发送到服务器。
由于我们是函数的主题,所以建议您查找流程抽象。
arr
这里是指函数定义中的arr
。它是数组的缩写,是列表类型。在python中,我们可以定义类似fruits = ["banana", "apple", "orange"]
的数组。数组对于像信息一样分组很有用,在python中,我相信这实际上称为 list 类型。因此,从概念上讲,想象列表而不是更深奥的数组可能更容易。
n = len(arr)
实际上是将数组的长度分配给变量n
。这可能是元素数量的简写。 len(arr)
是一个接受数组/列表并返回其长度的函数。同样,您可以致电print len(arr)
或简单地致电len(arr)
。
for j in range(0, n-i-1):
这有点复杂,因为它需要了解正在使用的算法,即Bubblesort。由于可能在线上有大量视频,因此我不会解释bubbleort的工作原理,但是我将解释括号中的内容。
(0, n-i-1)
我们想在当前元素和它之前的元素之间进行比较。当前元素之前的元素大于当前元素。这意味着,如果我们位于元素i
处,则无需比较元素i
与n
之间的元素。我们从i
中减去n
,这给我们留下了元素0
至i
。我们不需要将i
与自身进行比较,因此我们减去了另外的1
。这是由于j
在整个数组中循环,并且可能与i
相同。
if arr[j] > arr[j+1] :
这是一个条件语句,也称为分支语句,或 if语句。条件arr[j] > arr[j+1]
适用于位置j
的元素大于j+1
的元素。
arr[j], arr[j+1] = arr[j+1], arr[j]
我认为这是交换的简写。一个简单的交换如下所示。
temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
return arr
返回排序后的数组。
最后一点我不熟悉,因为我不太使用python。也许这可能是您的一些研究。
希望这会有所帮助。