反向有序数组的插入排序算法成本为0.00000秒?

时间:2017-03-19 17:54:49

标签: algorithm sorting

我在数组中随机创建了30.000个数字。然后我正常排序这些数字。之后,我反转,并应用插入排序算法。看看;

 begin = clock();
 insertion(dizi, boyut);
 end = clock();

 printf("\n time cost: %f z... ", (double)(end - begin) / CLOCKS_PER_SEC);

当我打印它时说0.000000秒,这是不可能的。 我哪里弄错了?

这是我的插入排序代码

void insertion(int dizi[], int boyut)
{
    int i, j, temp;

    for(i = 1; i < boyut; i++)
    {
        temp = dizi[i];
        j = i-1;
        while((temp < dizi[j] && j >= 0))
        {
            dizi[j+1] = dizi[j];
            j--;
        }
        dizi[j+1] = temp;
    }
}

1 个答案:

答案 0 :(得分:1)

错误是微妙的:编译器观察到你对该数组进行了大量写操作,但是从不对它做任何事情,因此它有助于删除该部分以使代码运行得更快。在这种情况下,要快得多。

为了解决这个问题,在对数据进行排序后,从数组中打印一个随机元素,以便使用&#34;使用&#34;。如果打印出一个随机元素,编译器就知道它需要对整个数组进行实际排序,并且不能作弊。