Как отсортировать строку в алфавитном порядке без встроенных функций

Мой код:

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()

Это то, как я это сделал, я хочу знать, как я могу сделать это для любой строки (имеется в виду любая удлиненная строка)

3 ответа

Попробуйте этот алгоритм:

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))

Первая идея состоит в том, чтобы использовать реализацию пузырьковой сортировки:

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().

Если мы сравним значение ascii, то сортировка будет легкой.

Бывший:

      s = 'apple'

q = list(s)     
['a', 'p', 'p', 'l', 'e']


Code will be : 

for i in range(len(q)):

    for j in range(i+1,len(q)):
        if ord(q[i])>ord(q[j]):
             q[i],q[j] = q[j],q[i]
print(q)

''.join(q) 
Другие вопросы по тегам