给定一个数组范围从1到100的大数组。排序的最佳方法是什么?
采访者强调单词 range ,即数组中出现的最大数字是100。
答案 0 :(得分:1)
试试这个:
long result[100] = {0};
for (iterator it = vec.begin(); it != vec.end(); ++it)
{
result[*it - 1]++;
}
因此,您将在向量上移动线性并计算存在的所有数字。结果你将收到你有多少1,你有多少2等,即它将按照排序。
UPD:正如KillianDS所写,我的意思是counting sort。这是快速的。
答案 1 :(得分:1)
好吧,因为基本上给出了答案,示例代码。不需要从原始数组中复制数据;它可以从直方图中的数据生成,在wiki counting sort variant部分称为变体算法:
std::vector <size_t> hist(101, 0); // using index 1 to 100 inclusive
size_t i, j, n;
for (i = 0; i < vec.size(); i++)
hist[vec[i]]++;
i = 0;
for(j = 1; j <= 100; j++)
for(n = hist[j]; n; n--)
vec[i++] = j;
答案 2 :(得分:0)
可能他们想听听radix sort。
答案 3 :(得分:0)
似乎排序是最适合这个问题的算法,它是O(n),稳定且易于实现。 http://en.wikipedia.org/wiki/Counting_sort