问题描述
我正在尝试为字符串实现基数排序,但是我只能通过字符串长度来实现。我想按长度和字母顺序对字符串数组进行排序。甚至可以用基数排序来做吗?
这是我的代码:
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","ES"]
解决方法
似乎我能够解决它。
我只是根据它们的大小将单词放入桶中,然后我使用常规基数排序对每个桶进行排序,计数排序作为子例程,然后我将数组展平。
我正在发布代码,以便它可能对某人有用
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):
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))