为什么排序算法需要零秒

时间:2011-10-18 14:33:58

标签: c++ time

这里是算法

#include<iostream>
#include<Windows.h>
#include<time.h>
using namespace std;
int main(){
    int a[10]={12,3,5,2,7,80,10,1,16,30};
    long ts,te;
    srand(::GetTickCount());
    ts=clock();
     for (int i=0;i<10;i++){
       for (int j=9;j>i;j--){

                  if (a[j]<a[j-1]){

                   int t=a[j];a[j]=a[j-1];a[j-1]=t;

                  }

       }



     }

       te=clock();
       cout<<" time elapsed "<<te-ts<<endl;




 return 0;
}

但我很惊讶,因为它给我零作为输出,我正在测量从代码开始到结束所经过的时间,以及为什么?我的计算机不是所谓的超级计算机,这个代码片段有什么问题?

3 个答案:

答案 0 :(得分:7)

除非你使用穿孔卡来编写你的程序,否则你不应该对10个数字的排序少于一个滴答感到惊讶。如果您想要更准确的代码配置文件,请使用毫秒,这样可以让您有更好的想法。

循环中最内层的指令运行100次 - 与现在的低端处理器相比,这没什么。

编辑:我用100000个数字测试了代码,在for循环中进行了10 ^ 10次迭代,只用了3秒钟。

答案 1 :(得分:1)

排序十个数字的时间少于一个时钟,你不应该感到惊讶。多次重复排序以获得有意义的计时。

我的计算机需要0.18秒才能使用完全相同的起始阵列运行100万次重复循环。因此每种类型大约需要180微秒。通过一对clock()来电测量,这太精细了。

答案 2 :(得分:0)

使用高分辨率计时器可以获得更准确的时间测量。 见http://www.songho.ca/misc/timer/timer.html 您尝试测量的时间在微秒范围内离开!