【问题标题】:Implementation of short bubble and bubble sort短冒泡和冒泡排序的实现
【发布时间】:2017-03-11 13:55:22
【问题描述】:

Bubble sort

在上面的 URL 中清楚地写着短冒泡是冒泡排序的一种修改,以减少通过次数。 因此,在我对这两种算法的实现中,我添加了一个计数器来计算通过次数,令人惊讶的是,两者的编号相同。通行证。 这是我的代码:

def bubbleshort(mylist):
    flag= True
    passnum= len(mylist) -1
    counter = 0
    while flag and passnum > 0:
          flag = False

          for element in range(passnum):
                if mylist[element] > mylist[element + 1]:
                flag = True

                temp= mylist[element]
                mylist[element]= mylist[element+1]
                mylist[element + 1] = temp
                counter += 1
          passnum -= 1
    return mylist, counter

def bubble(yourlist):
    count=0
    for i in range(len(yourlist)-1, 0, -1):
        for swap in range(i):
            if yourlist[swap] > yourlist[swap + 1]:
                temp=yourlist[swap]
                yourlist[swap]=yourlist[swap + 1]
                yourlist[swap + 1]= temp
                count+= 1
    return yourlist, count

mylist = [20,30,40,90,50,60,70,80,100,110]
mylistx = [20,30,40,90,50,60,70,80,100,110]
sortedList, counter= bubbleshort(mylist)
sortList, count= bubble(mylistx)
print(sortedList,counter)
print(sortList,count)

此外,如果我将相同的列表传递给两个函数,则气泡函数会产生零计数,但仍会给出排序列表。 所以任何人都可以告诉我修改的目的究竟是什么。通行证是一样的。他们可能是我的计数器实现错误的机会,这就是我得到错误答案的原因。

【问题讨论】:

    标签: algorithm python-3.x sorting bubble-sort


    【解决方案1】:

    这两个函数是否经过相同的传递次数实际上取决于输入列表。

    例如,像[9,1,2,3,4,5,6,7,8] 这样的几乎排序的列表对于短气泡函数只需要两次传递,而对于常规气泡函数总是需要 8 (n-1) 次传递。

    【讨论】:

    • 但是你能解释一下它是如何工作的吗?我的意思是我刚刚添加了一个标志
    • @Dr._Duck 在每次传递中,我们都有一个标志,指示在传递期间是否发生任何交换。如果标志为 false,则不需要进一步传递,并且列表已按排序顺序。
    猜你喜欢
    • 2012-07-23
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多