鱼C论坛

 找回密码
 立即注册
查看: 1568|回复: 1

[已解决]关于Python中的冒泡排序

[复制链接]
发表于 2023-9-25 19:14:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以下是我写的一段关于冒泡排序的代码:
str=[]
s=input()
x=1
i=0
j=0

while(x<len(s)):
    if(s[x].isalnum and s[x]!=',' and s[x]!='[' and s[x]!=']'):
        str.append(int(s[x]))
        x+=1
    else:
        x+=1

while(i<len(str)):
    while(j<len(str)-1):
        if(str[j]<str[j+1]): 
            t=str[j]; str[j]=str[j+1]; str[j+1]=t;
        j+=1
    i+=1

print(str)    

输入:[3,2,1,5,6,4]
期待输出:[6,5,4,3,2,1]
实际输出:[3, 2, 5, 6, 4, 1]

请问:
①为什么我写的冒泡排序没有起到应有的效果?
②为什么实际输出数字前有空格?

求大佬解答!!!
最佳答案
2023-9-25 19:14:55
首先,针对第一个问题,你的冒泡排序算法有些问题。在你的代码中,你只进行了一次冒泡排序,而实际上,冒泡排序需要多次遍历才能保证所有元素都被正确排序。你需要在外层再套一层循环,用于控制冒泡排序的次数。修改后的代码如下:
str=[]
s=input()
x=1

while(x<len(s)):
    if(s[x].isalnum and s[x]!=',' and s[x]!='[' and s[x]!=']'):
        str.append(int(s[x]))
        x+=1
    else:
        x+=1

for i in range(len(str)-1):
    for j in range(len(str)-1-i):
        if str[j] < str[j+1]:
            str[j], str[j+1] = str[j+1], str[j]

print(str)

其次,关于实际输出数字前有空格的问题,这是因为你在输出列表时,每个元素之间都有一个空格。可以使用join函数来避免这个问题,修改后的代码如下:
str=[]
s=input()
x=1

while(x<len(s)):
    if(s[x].isalnum and s[x]!=',' and s[x]!='[' and s[x]!=']'):
        str.append(int(s[x]))
        x+=1
    else:
        x+=1

for i in range(len(str)-1):
    for j in range(len(str)-1-i):
        if str[j] < str[j+1]:
            str[j], str[j+1] = str[j+1], str[j]

print("[{}]".format(",".join(str)))

希望能够帮到你!

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-25 19:14:55 | 显示全部楼层    本楼为最佳答案   
首先,针对第一个问题,你的冒泡排序算法有些问题。在你的代码中,你只进行了一次冒泡排序,而实际上,冒泡排序需要多次遍历才能保证所有元素都被正确排序。你需要在外层再套一层循环,用于控制冒泡排序的次数。修改后的代码如下:
str=[]
s=input()
x=1

while(x<len(s)):
    if(s[x].isalnum and s[x]!=',' and s[x]!='[' and s[x]!=']'):
        str.append(int(s[x]))
        x+=1
    else:
        x+=1

for i in range(len(str)-1):
    for j in range(len(str)-1-i):
        if str[j] < str[j+1]:
            str[j], str[j+1] = str[j+1], str[j]

print(str)

其次,关于实际输出数字前有空格的问题,这是因为你在输出列表时,每个元素之间都有一个空格。可以使用join函数来避免这个问题,修改后的代码如下:
str=[]
s=input()
x=1

while(x<len(s)):
    if(s[x].isalnum and s[x]!=',' and s[x]!='[' and s[x]!=']'):
        str.append(int(s[x]))
        x+=1
    else:
        x+=1

for i in range(len(str)-1):
    for j in range(len(str)-1-i):
        if str[j] < str[j+1]:
            str[j], str[j+1] = str[j+1], str[j]

print("[{}]".format(",".join(str)))

希望能够帮到你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 10:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表