как отсортировать строку в алфавитном порядке без встроенных функций - PullRequest
0 голосов
/ 09 октября 2018

Мой код:

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 голосов
/ 09 октября 2018

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

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

0 голосов
/ 09 октября 2018

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

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