簡體   English   中英

用Python對字母數字字符串進行排序-選擇排序,冒泡排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM