为什么使用气泡排序时数组的最小元素没有排序?

2024-05-20 02:44:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近开始学习python。我已经为冒泡排序编写了一个函数。很好用。当我使用两个最小值时只有一个问题。第二个排序不正确

def bubble_sort(arr):
    flag = True
    for i in range(len(arr) - 1):
        if flag == False:
            return arr
        flag = False
        for j in range(i, len(arr) - 1):
            if arr[j] > arr[j + 1]:
                print(arr[j], arr[j + 1])
                temp = arr[j + 1]
                arr[j + 1] = arr[j]
                arr[j] = temp
                flag = True
    return arr


print(bubble_sort([1, 5, 3, 2, 5, 1, 6])) //[1, 2, 1, 3, 5, 5, 6]

我希望两个1在开头,但是第二个在第三个位置


Tags: 函数infalsetrueforlenreturnif
1条回答
网友
1楼 · 发布于 2024-05-20 02:44:46

应该而不是增加每个循环的开始索引,而是减少结束索引,如:

def bubble_sort(arr):
    flag = True
    for i in range(1, len(arr)):
        if not flag:
            return arr
        flag = False
        for j in range(len(arr) - i):
            if arr[j] > arr[j+1]:
                arr[j+1], arr[j] = arr[j], arr[j+1]
                flag = True
    return arr

每次迭代都将光标从左向右移动。这意味着如果光标找到最大值,它会将该值移动到列表的右端。但对于最小值,同样的情况并不成立。如果光标找到最小值,它将只向左移动一个位置。这就是为什么每次迭代都应该从列表的开头开始

相关问题 更多 >