如何在没有内置函数的情况下按字母顺序对字符串进行排序

时间:2018-10-09 09:33:32

标签: python string sorting quicksort string-length

我的代码:

alphabet = "abcdefghijklmnopqrstuvwxyz"
def sort3():
    string = input("please enter a 3 character string: ")
    string1 = string[0]
    string2 = string[1]
    string3 = string[2]
    stringpos1 = alphabet.index(string1)
    stringpos2 = alphabet.index(string2)
    stringpos3 = alphabet.index(string3)
    if stringpos3 > stringpos2 > stringpos1:       # 123
        print(string1 + string2 + string3)
    elif stringpos2 > stringpos3 + stringpos1:     # 132
        print(string1 + string3 + string2)
    elif stringpos3 > stringpos1 > stringpos2:     # 213
        print(string2 + string1 + string3)
    elif stringpos1 > stringpos3 > stringpos2:     # 231
        print(string2 + string3 + string1)
    elif stringpos2 > stringpos1 > stringpos3:     # 312
        print(string3 + string1 + string2)
    elif stringpos1 > stringpos2 > stringpos3:     # 321
        print(string3 + string2 + string1)


sort3()

这就是我所做的方式,我想知道如何对任何字符串(意味着任何加长的字符串)执行此操作

2 个答案:

答案 0 :(得分:0)

尝试以下算法:

def sort(lst):
    if not lst:
        return []
    return (sort([x for x in lst[1:] if x <  lst[0]])
            + [lst[0]] +
            sort([x for x in lst[1:] if x >= lst[0]]))



word=input('enter a word: ')
print(''.join(sort(word)))

示例输出:

enter a word: xzy
xyz

适用于任何长度,甚至:

enter a word: rcrfr sefre erg ergergerg r
    ceeeeeeffggggrrrrrrrrrs

很难将您的代码实现为任何加长的字符串

顺便说一句,慢速方式:

from random import shuffle
l=list(input('enter a word: '))

def is_sorted(iterable):
  for a1,a2 in zip(iterable, iterable[1:]):
     if a1 > a2: return False
  return True

sorted_list = l
while True:
   shuffle(sorted_list)
   if is_sorted(sorted_list): break
print(''.join(sorted_list))

答案 1 :(得分:0)

第一个想法是使用冒泡排序实现:

def bubbleSortStr(astr):
    my_list = [x for x in my_str]
    bubbleSort(my_list)
    return ''.join(my_list)

def bubbleSort(alist):
    for passnum in range(len(alist)-1,0,-1):
        for i in range(passnum):
            if alist[i]>alist[i+1]:
                temp = alist[i]
                alist[i] = alist[i+1]
                alist[i+1] = temp

my_str = "BubbleSort is cool"
print bubbleSortStr(my_str)
#  BSbbceillooorstu

我从这里获取了实际气泡排序的代码:http://interactivepython.org/runestone/static/pythonds/SortSearch/TheBubbleSort.html这是一个很好的教程,它解释了最基本的排序算法之一。

由于气泡排序示例仅对列表进行排序,因此我不得不将字符串转换为在bubbleSortStr()中完成的列表。