在Python-选择排序,冒泡排序中排序字母数字字符串

问题描述 投票:0回答:2

问题是 编写一个程序来排序字符串而不使用内置方法。输入:“a390testai”输出:“039aaiest”

我看了一些论坛,为此寻找答案。我发现这个论坛In Python, how can I naturally sort a list of alphanumeric strings such that alpha characters sort ahead of numeric characters?但它看起来不像任何解决方案使用选择或冒泡排序。我的问题是: 1)在处理这样的问题时,我是否必须先将字符串转换为列表?例如:str = list(“exam123ple”)?要避免“TypeError:'str'对象不支持项目分配”

2)我尝试使用选择排序和冒泡排序,但他们没有返回预期的结果。

   #Selection sort
s="a390testai"
s=list(s)  # convert to list


for i in range(len(s)):
    min_val=min(s[i:])
    min_val_pos=s.index(min_val)

    s[i],s[min_val_pos]=s[min_val_pos],s[i]

print('s',s)

#Bubble sort
bs="a390testai"

bs=list(bs)
for i in range(0,len(bs)-1):
       if bs[i]>bs[i+1]:
           bs[i], bs[i+1]=bs[i+1],bs[i]

print(bs)

039testaai >> selection sort
390aestait >> bubble sort

在此先感谢您的帮助和解释。

python algorithm sorting
2个回答
0
投票

是的,你必须使用list作为字符串是不可变的,你不能改变它们的一部分。这是一个冒泡排序的例子。

s = list('a390testai')

is_sorted = False
while not is_sorted:
    for i in range(len(s)-1):
        if s[i] > s[i+1]:
            s[i+1], s[i] = s[i], s[i+1]
            break
    else:
        is_sorted=True

print("".join(s))

1
投票

冒泡排序需要不止一次通过。每次通过,你会经历一个较少的元素,因为最后一个元素已经“冒泡”到位。

在您的选择排序中,s.index返回第一个匹配项的索引。因此,如果您的字符串有重复的字母,则返回错误的字母。您需要在[i:]范围内搜索并添加i,以找到正确的实例。

© www.soinside.com 2019 - 2024. All rights reserved.