为什么排序算法需要零秒

dat*_*ili 1 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Luc*_*ore 7

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

循环中最内层的指令运行100次 - 这与现在的低端处理器相比毫无意义.

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

  • 对于现代计算机,即使毫秒也不会太小,无法测量10个数字的排序.使用更大的样本或使用微秒计时器进行测量. (2认同)