python - 在 Python 中对字母数字字符串进行排序-选择排序、冒泡排序

标签 python algorithm sorting

问题是
编写一个程序来排序字符串而不使用内置方法。 输入:“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' object does not support item assignment”

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

预先感谢您的帮助和解释。

最佳答案

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

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

关于python - 在 Python 中对字母数字字符串进行排序-选择排序、冒泡排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55752245/

相关文章:

带条件的 Python 排列(回溯)

c++ - lambda 表达式语法错误

python:对一系列元素的列表列表进行排序

python - PyCharm TensorFlow 警告 - 类型 'Variable' 没有预期的属性 '__sub__'

python - 从 matplotlib : boxplot 中查找离群点

python - 如何在使用 QWaitCondition 的 QThread 中使用 QTimer? (皮塞德)

python - 在 OpenCV 中测量边缘强度,梯度大小

java - 创建/排序 List<X>,其值的顺序与 List<Y> 中的顺序相同

javascript - 在数组数组中搜索数组的最有效方法

Python - 在 txt.file 中搜索 ID,然后从下面的行返回变量