【问题标题】:Bubble Sort Algorithm in Python - Last Number Not SortingPython中的冒泡排序算法 - 最后一个数字不排序
【发布时间】:2012-03-01 13:15:35
【问题描述】:

算法对除第一个数字之外的所有数字进行排序,并将其设置为最后一个。请帮忙!

def bubbleSort(numbers): # Bubble Sort Algorithm
    numbers = list(numbers)
    i = 0
    j = 0
    for i in range(len(numbers)):
        for j in range(len(numbers) - i):
            if numbers[j] < numbers[j-1]: 
                       temp = numbers[j-1]
                       numbers[j-1] = numbers[j]
                       numbers[j] = temp

    print numbers
    print numbers

【问题讨论】:

  • 快速说明:您不需要明确设置i = 0j = 0。这是for 循环的一部分,它表示“让i 假设range(n) - 0,1,2,3,4...n 中的值。
  • 另请注意,交换两个数字可以更好地表示为a, b = b, a,如numbers[j-1], numbers[j] = numbers[j], numbers[j-1]。见python.net/~goodger/projects/pycon/2007/idiomatic/handout.html(所有python程序员必读。)
  • 最后,请注意numbers = list(numbers) 在传入非列表的参数时可能会产生奇怪的效果。例如:list("foobar") 给出['f', 'o', 'o', 'b', 'a', 'r']list( {'key1':'value1','key2':'value2'} ) 给出['key2', 'key1']。如果你想确保你的函数得到一个列表,最好测试条件type (numbers) is list

标签: python algorithm


【解决方案1】:

问题是有时 [j-1] 会变成负数。在 python 中,numbers[-1] 表示“获取数字中的最后一个元素”。这是一个固定版本:

def bubbleSort(numbers): # Bubble Sort Algorithm
    nums = list(numbers)
    for i in range(len(nums)):
        for j in range(i+1, len(nums)):
            if numbers[j] < numbers[i]:
                numbers[j], numbers[i] = numbers[i], numbers[j]

    print numbers

您会注意到,在 python 中也可以在没有临时变量的情况下交换数字

【讨论】:

  • 啊,打败我了。更准确地说,当j = 0 时,您正在比较列表的第一个和最后一个元素。要澄清numbers[-1] 的含义,请尝试foo = [1, 2, 3, 4]; foo[-1]; foo[-2]; foo[0:-1]
  • 是选择排序而不是冒泡排序?
  • @Bear,这是一种稍微“优化”的冒泡排序,一旦不再有交换的可能性,我们就会继续前进。但是,它仍然具有 O(n^2) 时间复杂度。
  • 否:选择排序在列表的未排序部分中查找最大的数字,然后将其移动到列表的顶部。冒泡排序通过列表在列表中的相邻值之间进行交换。
  • @habitue:“优化的冒泡排序”每次都让我大吃一惊。尽管对于 Python 中可能的最佳冒泡排序,请参阅:stackoverflow.com/questions/895371/bubble-sort-homework
【解决方案2】:

我不会将其描述为“冒泡排序”,因为它不会交换彼此相邻的列表元素。它更像是“选择排序”,因为它正在查看列表并将每个元素与第一个元素进行比较,然后将最小的数字与第一个交换。

这似乎是一个泡沫/选择混搭。

【讨论】:

    猜你喜欢
    • 2011-12-16
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 2022-11-04
    • 2013-09-04
    • 2013-11-02
    • 2021-05-03
    相关资源
    最近更新 更多