给定一个序列 a,将 a 从小到大排序。
n≤107,ai≤109。
我自己想了一个奇怪的排序方法:
选择一个数 k,例如 k=5×103。对于每一个数,都算出这个数除以 k 得到的商和余数。那么显然,商的值不会大于 2×105,余数的值不会大于 5×103。首先我先按照商从小到大,这个用桶排。然后对于商相等的数,再用桶以余数从小到大排序。那么最终的序列就是商乘以 k 加上余数。
所以我那个思路可以吗?我觉得如果这个思路可行,那么对于 n≤107,ai≤1012 都可以使用 O(n) 排序(k 取 106)。