使用Python使用指针进行冒泡排序

问题描述 投票:0回答:2

该代码不适用于某些测试用例。

def bubbleSort(array):
    l = 0
    r = 1
    isSorted = False
    while not isSorted:
        isSorted = True
        while r <= len(array)-1:
            if array[r] < array[l]:
                swap(l, r, array)
                isSorted = False
            l += 1
            r += 1
    return array

def swap(i, j, array):
    array[i], array[j] = array[j], array[i]
    return

任何人都可以帮助我解决此问题吗?

python bubble-sort
2个回答
0
投票

您需要将[r]和[l]重新初始化回r = 1内部的l = 0while not isSorted:。否则,您将只运行一次完整循环,因为在第一次迭代结束时,r已经在len(array)


0
投票

就您的代码而言,每次isSortedFalse时,您都必须遍历所有元素。因此,每次执行外部l = 0循环时,都必须初始化r = 1while


不需要使用两个计数器变量lr,您可以按如下所示简单地实现冒泡排序:

def bubbleSort(array):
    isSorted = False
    while not isSorted:
        isSorted = True
        for i in range(1, len(array)):
            if array[i] < array[i - 1]:
                swap(i, i - 1, array)
                isSorted = False
    return array

def swap(i, j, array):
    array[i], array[j] = array[j], array[i]
    return

并且当您执行>>>print(bubbleSort([10, 2, 1, 3, 2, 6, 25]))

输出将是:

[1, 2, 2, 3, 6, 10, 25]
© www.soinside.com 2019 - 2024. All rights reserved.