Python中的冒泡排序不排序

Python中的冒泡排序不排序,python,bubble-sort,Python,Bubble Sort,我已经开始尝试在一些简单的代码中再次使用python,在此之前我只真正使用了p5.js。我试图编写一个冒泡排序,在完成一个有效的冒泡排序后,我将部分代码复制到另一个代码中,以实现First Fit Desculating bin打包。现在只要稍作改动,排序就不再像以前那样工作了。我只是将其更改为执行所有气泡排序,直到排序为止,而不是在用户输入之间一次排序一次。新代码没有正确地对项目进行排序,并且经常将列表中的最高数字排序到中间。我试过用108和20这样的数字,108总是在20之后,尽管它是递减排

我已经开始尝试在一些简单的代码中再次使用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