按长度和字母顺序对字符串进行基数排序

时间:2020-12-28 18:49:10

标签: python arrays string sorting radix-sort

我正在尝试为字符串实现基数排序,但是我只能通过字符串长度来实现。我想按长度和字母顺序对字符串数组进行排序。甚至可以用基数排序来做吗?

这是我的代码:

error - ReferenceError: document is not defined
    at Module../node_modules/bootstrap/dist/js/bootstrap.esm.min.js (C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\.next\server\pages\_app.js:195:2902)    
    at __webpack_require__ (C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\.next\server\pages\_app.js:23:31)
    at Module../src/pages/_app.jsx (C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\.next\server\pages\_app.js:1070:107)
    at __webpack_require__ (C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\.next\server\pages\_app.js:23:31)
    at Object.0 (C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\.next\server\pages\_app.js:1115:18)
    at __webpack_require__ (C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\.next\server\pages\_app.js:23:31)
    at C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\.next\server\pages\_app.js:91:18
    at Object.<anonymous> (C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\.next\server\pages\_app.js:94:10)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at requirePage (C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\node_modules\next\dist\next-server\server\require.js:1:1184)
    at loadComponents (C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\node_modules\next\dist\next-server\server\load-components.js:1:865)
ReferenceError: document is not defined
    at Module../node_modules/bootstrap/dist/js/bootstrap.esm.min.js (C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\.next\server\pages\_app.js:195:2902)    
    at __webpack_require__ (C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\.next\server\pages\_app.js:23:31)
    at Module../src/pages/_app.jsx (C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\.next\server\pages\_app.js:1070:107)
    at __webpack_require__ (C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\.next\server\pages\_app.js:23:31)
    at Object.0 (C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\.next\server\pages\_app.js:1115:18)
    at __webpack_require__ (C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\.next\server\pages\_app.js:23:31)
    at C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\.next\server\pages\_app.js:91:18
    at Object.<anonymous> (C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\.next\server\pages\_app.js:94:10)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at requirePage (C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\node_modules\next\dist\next-server\server\require.js:1:1184)
    at loadComponents (C:\Users\Ali Alperen Arıkan\Desktop\WebDevelopment\WebDevelopment\Projelerim\next-mongo\node_modules\next\dist\next-server\server\load-components.js:1:865)

我的示例数组是这样的

def flatten(arr):
    flatten_arr = []
    for item_arr in arr:
        for item in item_arr:
            flatten_arr.append(item)
    return flatten_arr


count_size = 256


def get_max_length(book_content_arr):
    size = 0
    for word in book_content_arr:
        word_size = len(word)
        if word_size > size:
            size = word_size
    return size


def radix_sort(arr):
    word_length = get_max_length(arr)
    for index in range(0, word_length):
        buckets = [[] for i in range(count_size)]
        for item in arr:
            if len(item) > index:
                num = ord(item[index])
                buckets[num].append(item)
            else:
                buckets[0].append(item)

        arr = flatten(buckets)
    return arr
    
    
example = ["A", "Z", "AB", "EWASADAS", "BY", "SDA" "ZA", "BD", "BA", "DSADSA", "BZ", "KA", "ES"]
print(radix_sort(example))

以及预期的输出:

example = ["A", "Z", "AB", "EWASADAS", "BY", "SDA" "ZA", "BD", "BA", "DSADSA", "BZ", "KA", "ES"]

1 个答案:

答案 0 :(得分:0)

似乎我能够解决它。

我只是根据它们的大小将单词放入桶中,然后我使用常规基数排序对每个桶进行排序,计数排序作为子例程,然后我将数组展平。

我正在发布代码,以便它可能对某人有用

signs = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]  
def flatten(arr):
    flatten_arr = []
    for item_arr in arr:
        for item in item_arr:
            flatten_arr.append(item)
    return flatten_arr


def get_max_length(arr):
    size = 0
    for word in arr:
        word_size = len(word)
        if word_size > size:
            size = word_size
    return size

def counting_sort_for_letters(arr, index):
    count = [0] * len(signs)
    output = [0] * len(arr)

    for item in arr:
        idx = signs.index(item[index])
        count[idx] += 1

    for i in range(1, len(count)):
        count[i] += count[i - 1]

    for j in range(len(arr) - 1, -1, -1):
        idx = signs.index(arr[j][index])
        count[idx] -= 1
        output[count[idx]] = arr[j]
    return output


def radix_sort(arr, world_length):
    for i in range(world_length - 1, -1, -1):
        arr = counting_sort_for_letters(arr, i)
    return arr
    

def custom_sort(arr):
    word_length = get_max_length(arr)
    buckets = [[] for i in range(word_length)]
    for item in arr:
        num = len(item) - 1
        buckets[num].append(item)
    for j in range(0, len(buckets)):
        buckets[j] = radix_sort(buckets[j], j + 1)
        
    arr = flatten(buckets)
    return arr
    
    
example = ["A", "Z", "AB", "EWASADAS", "BY", "SDA" "ZA", "BD", "BA", "DSADSA", "BZ", "KA", "ES"]
print(custom_sort(example))
相关问题