问题是
编写一个不使用内置方法对字符串进行排序的程序。
输入:“ 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
在此先感谢您的帮助和解释。
答案 0 :(得分:1)
气泡排序需要多次通过。每次经过,您都要少处理一个元素,因为最后一个已经“冒泡”了。
在您的选择排序中,s.index
返回 first 匹配项的索引。因此,如果您的字符串中有重复的字母,则会返回错误的字母。您需要在[i:]
范围内搜索并添加i
,以找到正确的实例。
答案 1 :(得分:0)
是的,您必须使用列表,因为字符串是不可变的,并且不能更改其中的一部分。这是气泡排序的示例。
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))