[英]sorting an alphanumeric string in Python- selection sort, bubble sort
問題是
編寫一個不使用內置方法對字符串進行排序的程序。 輸入:“ a390testai”輸出:“ 039aaiest”
我看過一些論壇來找到答案。 我在Python中找到了這個論壇,我如何自然地對字母數字字符串列表進行排序,以使字母字符排在數字字符之前? 但看起來沒有任何解決方案使用選擇或冒泡排序。 我的問題是:
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
在此先感謝您的幫助和解釋。
冒泡排序需要超過一遍。 每次通過,您都要少處理一個元素,因為最后一個已經“冒泡”了。
在您的選擇排序中, s.index
返回第一個匹配項的索引。 因此,如果您的字符串中有重復的字母,則會返回錯誤的字母。 您需要在[i:]
范圍內搜索並添加i
,以找到正確的實例。
是的,您必須使用列表,因為字符串是不可變的,您無法更改它們的一部分。 這是氣泡排序的示例。
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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.