这种排序算法叫什么?

时间:2013-04-04 10:15:11

标签: algorithm sorting

我正在考虑一种非比较排序算法,我想我自己找到了一个。

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]]

我确信我不是第一个遇到这个想法的人,所以我的问题是这个算法叫做什么?

提前致谢。

3 个答案:

答案 0 :(得分:1)

实际上,您的算法排序算法。它是0..ncalculate 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