采访排序算法

时间:2014-08-25 09:28:33

标签: c++ c sorting

给定一个数组范围从1到100的大数组。排序的最佳方法是什么?

采访者强调单词 range ,即数组中出现的最大数字是100。

4 个答案:

答案 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