Python中的冒泡排序不排序
我已经开始尝试在一些简单的代码中再次使用python,在此之前我只真正使用了p5.js。我试图编写一个冒泡排序,在完成一个有效的冒泡排序后,我将部分代码复制到另一个代码中,以实现First Fit Desculating bin打包。现在只要稍作改动,排序就不再像以前那样工作了。我只是将其更改为执行所有气泡排序,直到排序为止,而不是在用户输入之间一次排序一次。新代码没有正确地对项目进行排序,并且经常将列表中的最高数字排序到中间。我试过用108和20这样的数字,108总是在20之后,尽管它是递减排序。我使用的气泡函数是Python中的冒泡排序不排序,python,bubble-sort,Python,Bubble Sort,我已经开始尝试在一些简单的代码中再次使用python,在此之前我只真正使用了p5.js。我试图编写一个冒泡排序,在完成一个有效的冒泡排序后,我将部分代码复制到另一个代码中,以实现First Fit Desculating bin打包。现在只要稍作改动,排序就不再像以前那样工作了。我只是将其更改为执行所有气泡排序,直到排序为止,而不是在用户输入之间一次排序一次。新代码没有正确地对项目进行排序,并且经常将列表中的最高数字排序到中间。我试过用108和20这样的数字,108总是在20之后,尽管它是递减排
def bubble(x):
y = []
i = 0
k = 1
while i + k < len(x):
if x[i] < x[i + k]:
y.append(x[i + k])
k = k + 1
else:
y.append(x[i])
i = i + k
k = 1
y.append(x[i])
return y
def气泡(x):
y=[]
i=0
k=1
当i+k
原代码为:
numbers = []
len = int(input("How many numbers are there? "))
for i in range(0, len):
current = str(i + 1)
num = int(input("Number " + current + " "))
numbers.append(num)
print("Here are your numbers:")
print(numbers)
bubbling = False
def bubble(x):
y = []
i = 0
k = 1
while i + k < len:
if x[i] < x[i + k]:
y.append(x[i + k])
k = k + 1
else:
y.append(x[i])
i = i + k
k = 1
y.append(x[i])
return y
cont = input("Bubble? (Y/N) ")
if cont == "Y":
bubbling = True
while bubbling == True:
previous = numbers
numbers = bubble(numbers)
if numbers == previous:
end = input("The bubble sort has been finished" )
bubbling = False
break
print(numbers)
cont = input("Bubble? (Y/N) ")
if cont == "Y":
continue
else:
break
number=[]
len=int(输入(“有多少个数字?”)
对于范围(0,len)内的i:
电流=str(i+1)
num=int(输入(“数字”+当前+”)
numbers.append(num)
打印(“这是您的号码:”)
打印(数字)
冒泡=错误
def气泡(x):
y=[]
i=0
k=1
当i+k
我的第二次迭代是:(每次只输入一个数字,不输入任何东西,它就会冒泡)
listing=True
冒泡=真
临时数组=[]
#如果输入为空,请停止向数组中添加数字并添加仓位大小(稍后)
上市时:
临时编号=输入()
如果临时编号:
临时数组追加(临时编号)
其他:
listing=False
打破
打印(临时数组)
def气泡(x):
y=[]
i=0
k=1
当i+k
数字=[]
len=int(输入(“有多少个数字?”)
对于范围(0,len)内的i:
电流=str(i+1)
num=int(输入(“数字”+当前+”)
numbers.append(num)
打印(“这是您的号码:”)
打印(数字)
冒泡=错误
def气泡(x):
y=[]
i=0
k=1
当i+k
首先,你能给我们一个完整的例子吗?除非冒泡([108,20])
实际返回[20,108]
,否则“我尝试了包含108和20的数字”并不是一个完整的示例,它不会返回[20,108]
。无论如何,看起来您的问题不在冒泡排序中,而是在您的输入中temp\u number=input()
将为您提供一个字符串。如果对字符串进行排序,'108'
和'20'
,则'20'>'108'
,因为字符串是逐字符比较的,字典样式:'2'>'1'
,因此'20'
更大。您只需要temp\u number=int(input())
或类似的东西。如果你明白这一点,而且这只是一个简单的疏忽,我们可以把这个问题当作打字错误来解决;如果您需要进一步的解释,我们可以找到一个详细答案的副本。作为补充说明,您为什么要首先实现冒泡排序?如果您将其作为练习,您可能应该编写一个测试驱动程序,将各种不同的x
列表的bubble(x)
与sorted(x)
进行比较。如果您只需要对一些数字进行排序,只需调用sorted
,而不是实现自己效率较低的排序。这非常有意义!非常感谢,我想确保在第二个版本中,不仅可以包含整数,还可以忘记字符串转换。你能描述一下你的问题吗?
listing = True
bubbling = True
temp_array = []
# if an input is empty, stop adding numbers to the array and add bin size (LATER)
while listing:
temp_number = input()
if temp_number:
temp_array.append(temp_number)
else:
listing = False
break
print(temp_array)
def bubble(x):
y = []
i = 0
k = 1
while i + k < len(x):
if x[i] < x[i + k]:
y.append(x[i + k])
k = k + 1
else:
y.append(x[i])
i = i + k
k = 1
y.append(x[i])
return y
while bubbling:
prev_array = temp_array
temp_array = bubble(prev_array)
if temp_array == prev_array:
bubbling = False
break
print(temp_array)
numbers = []
len = int(input("How many numbers are there? "))
for i in range(0, len):
current = str(i + 1)
num = int(input("Number " + current + " "))
numbers.append(num)
print("Here are your numbers:")
print(numbers)
bubbling = False
def bubble(x):
y = []
i = 0
k = 1
while i + k < len:
if x[i] < x[i + k]:
y.append(x[i + k])
k = k + 1
else:
y.append(x[i])
i = i + k
k = 1
y.append(x[i])
return y
cont = input("Bubble? (Y/N) ")
if cont == "Y":
bubbling = True
while bubbling == True:
previous = numbers
numbers = bubble(numbers)
if numbers == previous:
end = input("The bubble sort has been finished" )
bubbling = False
break
print(numbers)
cont = input("Bubble? (Y/N) ")
if cont == "Y":
continue
else:
break