在Python 3中编写冒泡排序程序。冒泡排序是一种将值列表按顺序排序的算法。
我想把这个结果推向最后。
Original List: 4, 9, 74, 0, 9, 8, 28, 1
Sorted List: 0, 1, 4, 8, 9, 9, 28, 74
Number of Passes: 6
我怎么能完成它?
import sys
def bubblesort(mylist):
changes = passes = 0
last = len(mylist)
swapped = True
print("Original List: ", ','.join(map(str, mylist)) )
while swapped:
swapped = False
for j in range(1, last):
if mylist[j - 1] > mylist[j]:
mylist[j], mylist[j - 1] = mylist[j - 1], mylist[j] # Swap
changes += 1
swapped = True
last = j
if swapped:
passes += 1
print('Pass', passes, ':' , ','.join(map(str, mylist)))
print("\nOriginal List: ", ','.join(map(str, mylist)) )
print("Sorted List: ", ','.join(map(str, mylist)))
print("Number of passes =",passes)
return mylist
print("Welcome to a Bubble Sort Algorithm in Python!")
mylist = " "
while True:
print("\nBubble sort in Python 3 Program")
mylist = input("Enter a the value or type Exit to exit: ")
if (mylist == "exit" or mylist == "Exit" or mylist == "EXIT"):
print("Goodbye")
sys.exit()
else:
mylist = [int(v) for v in mylist.split(',')]
bubblesort(mylist)
我得到的输出:
Original List: 4,9,74,0,9,8,28,1
Pass 0 : 4,9,74,0,9,8,28,1
Pass 1 : 4,9,0,9,8,28,1,74
Pass 2 : 4,0,9,8,9,1,28,74
Pass 3 : 0,4,8,9,1,9,28,74
Pass 4 : 0,4,8,1,9,9,28,74
Pass 5 : 0,4,1,8,9,9,28,74
Pass 6 : 0,1,4,8,9,9,28,74
Original List: 0, 1, 4, 8, 9, 9, 28, 74
Sorted List: 0, 1, 4, 8, 9, 9, 28, 74
Number of Passes: 6
我想要的结果:
Original List: 4, 9, 74, 0, 9, 8, 28, 1
Pass 1: 4, 9, 0, 9, 8, 28, 1, 74
Pass 2: 4, 0, 9, 8, 9, 1, 28, 74
Pass 3 : 0, 4, 8, 9, 1, 9, 28, 74
Pass 4 : 0, 4, 8, 1, 9, 9, 28, 74
Pass 5 : 0, 4, 1, 8, 9, 9, 28, 74
Pass 6 : 0, 1, 4, 8, 9, 9, 28, 74
Original List: 4, 9, 74, 0, 9, 8, 28, 1
Sorted List: 0, 1, 4, 8, 9, 9, 28, 74
Number of Passes: 6
关于文本格式 - 用','
替换', '
(添加空格)。
关于Pass 0的打印(在你运行之前) - 将打印调用移到passes += 1
之后
最后 - 在您的示例中通过冒泡排序完成的传递次数将是7 - 6次传递,您仍然可以修改列表,并且您检测到列表的最终传递将被排序。
修改后的代码看起来像是:
import sys
def bubblesort(mylist):
changes = passes = 0
last = len(mylist)
swapped = True
print("Original List: ", ', '.join(map(str, mylist)) )
while swapped:
swapped = False
for j in range(1, last):
if mylist[j - 1] > mylist[j]:
mylist[j], mylist[j - 1] = mylist[j - 1], mylist[j] # Swap
changes += 1
swapped = True
last = j
passes += 1
print('Pass', passes, ':', ', '.join(map(str, mylist)))
print("Number of passes =",passes)
return mylist
print("Welcome to a Bubble Sort Algorithm in Python!")
while True:
print("\nBubble sort in Python 3 Program")
mylist = input("Enter a the value or type Exit to exit: ")
if (mylist == "exit" or mylist == "Exit" or mylist == "EXIT"):
print("Goodbye")
sys.exit()
else:
mylist = [int(v) for v in mylist.split(',')]
bubblesort(mylist)
这是解决方案:
import sys def bubblesort(mylist): changes = passes = 0 last = len(mylist) swapped = True print("Original List: ", ','.join(map(str, mylist)) ) while swapped: swapped = False for j in range(1, last): if mylist[j - 1] > mylist[j]: mylist[j], mylist[j - 1] = mylist[j - 1], mylist[j] # Swap changes += 1 swapped = True last = j if swapped: passes += 1 print('Pass', passes, ':' , ','.join(map(str, mylist))) print("Number of passes =",passes) return mylist print("Welcome to a Bubble Sort Algorithm in Python!") mylist = " " while True: print("\nBubble sort in Python 3 Program") mylist = input("Enter a the value or type Exit to exit: ") if (mylist == "exit" or mylist == "Exit" or mylist == "EXIT"): print("Goodbye") sys.exit() else: mylist = [int(v) for v in mylist.split(',')] bubblesort(mylist)
为了不再对已经排序的列表进行排序而不向通行证添加+1,您必须添加以下行:
if swapped: passes += 1 print('Pass', passes, ':' , ','.join(map(str, mylist)))
接下来,如果您不希望在第一次循环后获得原始字母,请将显示列表的行放在循环中。
首先,它需要7,因为最后一次传递没有交换(当它知道它完成时)。将passes += 1
和print语句移动到循环的末尾将正确显示。
对于您想要的输出,更改循环中事件的顺序并添加if语句以检查更改。 [下面给出]
对于实际传递的输出(包括没有变化的最后一个传递),只需从下面的代码中删除if语句。
import sys
def bubblesort(mylist):
changes = passes = 0
last = len(mylist)
swapped = True
print("Original List: ", ','.join(map(str, mylist)) )
while swapped:
swapped = False
for j in range(1, last):
if mylist[j - 1] > mylist[j]:
mylist[j], mylist[j - 1] = mylist[j - 1], mylist[j] # Swap
changes += 1
swapped = True
last = j
# Only prints and increases number of passes if there was a swap
# Remove if statement for the correct number of passes
if(swapped):
passes += 1
print('Pass', passes, ':' , ','.join(map(str, mylist)))
print("Number of passes =",passes)
return mylist
print("Welcome to a Bubble Sort Algorithm in Python!")
mylist = " "
while True:
print("\nBubble sort in Python 3 Program")
mylist = input("Enter a the value or type Exit to exit: ")
if (mylist == "exit" or mylist == "Exit" or mylist == "EXIT"):
print("Goodbye")
sys.exit()
else:
mylist = [int(v) for v in mylist.split(',')]
bubblesort(mylist)
这是python中冒泡排序的简单应用
l=[1,6,3,7,5,9,8,2,4,10]
for i in range(1,len(l)):
for j in range (i+1,len(l)):
if l[i]>l[j]:
l[i],l[j]=l[j],l[i]