我正在考虑一种非比较排序算法,我想我自己找到了一个。
Input: A[0...n] ranged from 0...n //ideally, I think it can be expanded to more general case later
Non-comparison-sort(A,n):
let B = [0...n] = [0]
for i in A:
B[A[i]]=i
在此算法之后,数组B中的每个元素都将引用数组A并说如果我们想要访问其值为m的A [k],我们可以使用A [B [m]]
我确信我不是第一个遇到这个想法的人,所以我的问题是这个算法叫做什么?
提前致谢。
答案 0 :(得分:1)
实际上,您的算法不排序算法。它是0..n
上calculate the inverse of a permutation的算法。换句话说,它会告诉你如何重新排列A以便拥有所有数字。
为什么不是排序算法?
如果A包含范围为0..n的所有数字,则排序的数组将始终为B = [0,1,2,...,n]。另一方面,如果A有重复,那么这个算法将不起作用。
我想你要做的是counting sort。此算法适用于A是大小为k
的数组且包含0..n
范围内的数字的情况。该算法有一个大小为n+1
的数组B,它计算在A上迭代一次时每个数字出现的时间。
计算排序的示例(使用伪代码语法):
Counting-sort(A, n):
let B = [0...n] = [0]
for x in A:
B[x] = B[x] + 1
let C = [] // an empty list
for i in 0...n:
for j in 0...B[i]: // add each number 0..n the number of times it appeared in A
C.append(i)
return C
答案 1 :(得分:0)
读取存储桶排序here后,它看起来像存储桶的大小为1的桶排序。
在Bucket排序中,将元素放入存储桶后,每个存储桶都会被排序。
但是,在您的情况下,由于存储区大小为1,因此不需要此步骤。由于存储桶大小为1并且已在数组中合并,因此也不需要合并存储桶。
答案 2 :(得分:0)
我认为你有一个pigeon hole sort