Использование сортировки Radix для сортировки списка слов по алфавиту в Python - PullRequest
0 голосов
/ 21 марта 2019

У меня есть список слов, array = ['Alien', 'and', 'Alien', 'агрессивный', 'Alien', 'существо', 'и']

Однако, каждый раз, когда я сортирую это, я получаю массив = ['агрессивный', ' иностранец ', ' и ', ' и ', ' иностранец ', ' пришелец ',' существо '] что неправильно, потому что "пришельцы" разделены "и" (одни и те же слова должны быть сгруппированы вместе).

Может кто-нибудь указать, в чем проблема с моим радиксом, который дает мне эту проблему? Заранее спасибо!

def wordSort(word_list):
    max_len_word = find_max_char(word_list)
    radix_sort(word_list, max_len_word)

def find_max_char(word_list):
    max = 0
    for word in word_list:
        if max < len(word):
            max = len(word)
    return max

def radix_pass(array, base, digit):
    counter = [0 for i in range(base-1)]

    for i in range(1, len(array)):
        counter[get_digit(array[i], digit, True)] += 1

    position = [0 for i in range(base)]
    for value in range(base):
        position[value] = position[value-1] + counter[value-1]

    temp = [0 for i in range(len(array))]
    for i in range(len(array)):
        temp[position[get_digit(array[i], digit, True)]] = array[i]
        position[get_digit(array[i], digit, True)] += 1
    return temp

def get_digit(array_i, digit, boolean):
    if boolean == True:
        if len(array_i) - 1 < digit:
            return 0
        else:
            return ord(array_i[digit]) - 96

def radix_sort(array, digit):
    base = 27
    for i in range(digit-1, -1, -1):
        sorted_array = radix_pass(array, base, i)
    return sorted_array
...