奇怪的执行时间结果 - 比较bubble和shell排序

时间:2013-06-14 16:01:48

标签: c++ algorithm

我正在比较冒泡排序和Shell排序的执行时间。第二个显然应该更快,所以让我们看看:

time_start(); for(int i = 0; i < 100000; i++) numbers = shell(numbers); time_stop();

time_start(); for(int i = 0; i < 100000; i++) numbers = bubl(numbers); time_stop();

Numbers是1000个随机生成的元素的数组。我重复一切100000次。时间测量功能很简单clock()。排序功能:

std::vector<int> shell(std::vector<int> &d)
{
    int h, i, j, x;
    for(h = 1; h < d.size(); h = 3 * h + 1);
    h /= 9;
    if(!h) h++;

    while(h)
    {
        for(j = d.size() - h - 1; j >= 0; j--)
        {
            x = d[j];
            i = j + h;
            while((i < d.size()) && (x > d[i]))
            {
                d[i - h] = d[i];
                i += h;
            }
            d[i - h] = x;
        }
        h /= 3;
    }
    return d;
}

std::vector<int> bubl(std::vector<int> &d)
{
    int st = 0, temp;
    for(int i = 0; i < d.size() - 1 && st == 0; i++)
    {
        st = 1;
        for(int j = 0; ( j < d.size() - 1); j++)
        {
            if(d[j] > d[j + 1])
            {
                temp = d[j + 1];
                d[j + 1] = d[j];
                d[j] = temp;
                st = 0;
            }
        }
    }
    return d;
}

字符串是shell排序显示大约4秒,而冒泡排序显示小于1秒......

当我将排序数组传递给这些函数时(按递减顺序),我也可以获得更大的Shell排序时间。

有什么问题?

规格: CPU - i5 2500k 4,6GHz RAM - 4gb Windows 7

0 个答案:

没有答案