【问题标题】:Python: Modified Bubble SortPython:修改冒泡排序
【发布时间】:2018-06-30 14:07:36
【问题描述】:

这个程序是用python编写的。它的目标是通过交换将 ONE 的位置数移到正确的位置,然后输出它所花费的交换数。所以它与冒泡排序非常相似,只是程序不必使用与其相邻的数字进行切换。请参阅下面的示例

示例输入:

5 2 4 7 7 3  

样本输出:2

示例说明:
24773 - 5 个整数的起始集
24377 - 将 3 交换为前 7(第一次交换)(7 不在 3 旁边)
23477 - 交换 3 和 4 以获得最小到最大的数字(第二次交换)

这是我当前的 Python 代码。它采用传统的冒泡排序方法。

def bubbleSort(alist):
times = 0
for passnum in range(len(alist)-1,0,-1):
    for i in range(passnum):
        if alist[i]>alist[i+1]:
            times = times + 1 
            temp = alist[i]
            alist[i] = alist[i+1]
            alist[i+1] = temp
            print(alist)

return(times)

arrin = [5, 2, 4, 7, 7, 3]
print(bubbleSort(arrin))

这个输出:3
这个答案是不正确的,因为冒泡排序将 3 与相邻的 7 交换,将输出增加到 3(应该是 2)。

我将如何修改此代码以满足示例的要求?

【问题讨论】:

  • 感谢@srig 的提醒。你能帮帮我吗?

标签: python sorting bubble-sort


【解决方案1】:

您可以通过创建映射来做到这一点,其中键是数组的值,值是数组的索引。之后,遍历输入列表,并比较排序列表中的当前值和值。如果不同:
-增加交换次数
- 从地图中获取排序列表的索引,map[排序列表]
-in 输入列表用排序的当前值交换当前值
update map[当前列表值]=map[排序的当前列表值]
这需要在输入列表和反向输入列表上执行。以较小者为准。

def bubbleSort(alist):

 m = {}
 for i in range(len(alist)):
     m[alist[i]] = i 

 sorted_alist = sorted(alist)
 times = 0

 for i in range(len(alist)):
     if alist[i] != sorted_alist[i]:
         times +=1
         ind_to_swap = m[ sorted_alist[i] ]
         m[ alist[i] ] = m[ sorted_alist[i]]
         alist[i],alist[ind_to_swap] = sorted_alist[i],alist[i]
 return times

arrin = [2, 4, 7, 7, 3]
asc=bubbleSort(arrin)
desc=bubbleSort(list(reversed(arrin)))
print (min(asc,desc))

【讨论】:

    猜你喜欢
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2014-05-01
    相关资源
    最近更新 更多