在[1,5000]范围内对1000个不同整数的数组进行排序,最多访问一个元素一次

时间:2010-12-25 11:28:48

标签: algorithm sorting

假设您有一个1000个整数的数组。整数是随机顺序,但您知道每个整数在1到5000之间(包括1和5000)。此外, 每个数字在数组中只出现一次。假设您只能访问数组的每个元素一次。描述一种算法来对其进行排序。

我如何排序?

如果你在算法中使用了辅助存储,你能找到一个仍然是O(n)空间复杂度的算法吗?

2 个答案:

答案 0 :(得分:2)

        int[] firstarray = ....; // input array
        bool[] counterList = new bool[5000];

        for (int i = 0; i < 1000; i++)
        {
            counterList[firstarray[i]] = true;
        }

        int nCount = 0;
        for (int i = 0; i < 5000; i++)
        {
            if (counterList[i])
                firstarray[nCount++] = i;
        }

答案 1 :(得分:0)

你可以做count sort,这将是O(5000)的时间和空间复杂度,这几乎是O(N)。这是一个相当不错的匹配你的1000个数字的比例:5000的范围。希望这符合你只需要读一次每个数字的要求,即使它有点“存储”在桶中。

如果你想节省一些内存,并且可能需要一些时间(最多为5的常数因子),那么你可以使用更大的存储桶。看看bucket sort