我正在比较冒泡排序和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