需要帮助了解气泡排序解决方案代码

时间:2020-05-17 23:40:45

标签: python bubble-sort

因此,我正在学习Bubble Sort,并看到了以下代码:

def bubblesort(list_a):
    indexing_length = len(list_a) - 1  
    sorted = False

    while not sorted:  
        sorted = True  
        for i in range(0, indexing_length):
            if list_a[i] > list_a[i+1]:
                sorted = False  
                list_a[i], list_a[i+1] = list_a[i+1], list_a[i]  # flip position

    return list_a

我尝试在笔记本上运行此代码,以便更好地理解这一点。我尝试了5、2、3、7、10、1、8,过程是这样的:

--> 2, 5, 3, 7, 10, 1, 8
--> 2, 3, 5, 7, 10, 1, 8
--> 2, 3, 5, 7, 1, 10, 8
--> 2, 3, 5, 7, 1, 8, 10

我最终得到了未排序的数组,因为我认为for循环只会执行一次迭代。我理解不对吗?有人可以给我解释一下吗?

2 个答案:

答案 0 :(得分:2)

气泡排序是最简单的排序算法,该算法可通过以错误顺序重复交换相邻元素来工作。这种排序算法也称为 Brute Force 方法,原因是在排序过程中,列表中的每个元素都将与同一列表中的每个其他元素进行比较,如果比较的数字不按顺序,则它将调换职位。让我们来看看您的示例列表[5, 2, 3, 7, 10, 1, 8]

第一遍:比较0th index(5)1st index(2)并进行比较 if 0th index(5) > 1st index(2),它将交换位置,否则不会增加交换计数器。 [ 5 2 ,3、7、10、1、8]条件True(5 > 2),SWAP [ 2 5 ,3、7、10、1、8],然后再次比较[2, 5 3 ,7、10、1、8]条件True(5 > 3),SWAP [2, 3 5 ,7、10、1、8]等。

  • [2,3,5,7, 10 1 ,8]是(10> 1)。
  • [2,3,5,7,1, 10 8 ]是(10> 8)。
  • [2、3、5、7、1、8、10]

第二遍:

  • [2、3、5、7、1、8、10]
  • [2、3、5、7、1、8、10]
  • [2,3,5, 7 1 ,8,10] True(7> 1)。
  • [2、3、5、1、7、8、10]
  • [2、3、5、1、7、8、10]

第三遍:

  • [2、3、5、1、7、8、10]
  • [2,3, 5 1 ,7,8,10] True(5> 1)。
  • [2、3、1、5、7、8、10]
  • [2、3、1、5、7、8、10]

第四阶段:

  • [2, 3 1 ,5,7,8,10] True(3> 1)。
  • [2,1,3,5,7,8,10]
  • [2,1,3,5,7,8,10]

第5次通过:

  • [ 2 1 ,3、5、7、8、10]正确(2> 1)。
  • [1、2、3、5、7、8、10]
  • [1、2、3、5、7、8、10]

第六次通过:

  • [1、2、3、5、7、8、10]

第七次通过:

  • [1、2、3、5、7、8、10]

    def bubbleSort(arr):
        n = len(arr)
        for i in range(n):
            print(arr[i])
            for j in range(0, n - i - 1):
                if arr[j] > arr[j + 1]:
                    print(arr[j], arr[j+1])
                    arr[j], arr[j + 1] = arr[j + 1], arr[j]
                print(arr)
    
    arr = [5, 2, 3, 7, 10, 1, 8]
    bubbleSort(arr)
    print("Sorted array")
    print(arr)
    

答案 1 :(得分:0)

第一次[2, 3, 5, 7, 1, 8, 10]循环完成后,列表将为for,但是sorted的值为False。由于您仍在while not sorted循环中,因此该循环中的所有内容都会再次运行,包括另一个从索引0开始的for循环。

这将一直持续到for循环完成时对列表进行排序为止,因为这会使while循环的条件为False。

相关问题