解释气泡排序算法?

时间:2018-10-25 16:50:20

标签: python algorithm

我正在尝试了解有关算法的更多信息,并且正在研究气泡排序算法。我在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=',')

2 个答案:

答案 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处,则无需比较元素in之间的元素。我们从i中减去n,这给我们留下了元素0i。我们不需要将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。也许这可能是您的一些研究。

希望这会有所帮助。