是否可以实现“就地”迭代LSD n-radix排序?澄清一下:我已经阅读了wikipedia atricle就地MSD基数排序。它说:
计数排序用于确定每个bin的大小及其起始索引。
因此需要一个辅助数组来存储索引,但如果这就是它需要的全部,我仍然认为它是一个就地算法(因为这个数组的大小为n,对于n-radix排序) 。我还阅读了this answer,再次实现了一个递归的MSD基数排序。那个也没有针对n-radix排序的一般实现。
答案 0 :(得分:0)
编辑:我最后在答案中描述了我的算法:https://cs.stackexchange.com/questions/93563/fast-stable-almost-in-place-radix-and-merge-sorts
是。将输入数据虚拟地分成一些大小的页面(4 KB将很好地服务)。然后在消耗数据时重用这些页面。但是你需要一些额外的内存 - 初始存储桶最多n页,下一页指针(每页一个指针),每桶存储3个n *指针head_page / current_page / current_write_ptr
算法:
当然,如果你需要多个LSD传递,你可以跳过第3步,除了最后一次传递,直接从第2步建立的列表开始每个排序传递。但是这将需要n个额外的页面。