获得相同的运行时间来回答不同的输入数字

时间:2014-01-02 22:19:01

标签: java sorting insertion-sort

到目前为止,我已经完成了...... 第一个类包含插入排序算法

public class Sorting {


        public static void insertionSort(int[] r)
        {
            for ( int i = 1; i < r.length; i = i+1 )
            {int v = r[i]; 
            int j = i;
            while ( j != 0 && r[j-1] > v )
            {r[j] = r[j-1];
            j = j-1;
            }
            r[j] = v;
                }
            }
}

这是第二节......

import java.util.*;


public class ExecutionTime{

    public static void main(String[] args){
        int size=30000;
        int[] r  = new int[size];
        int number=1;
        for(int i=1;i<size;i++){
            r[i]=number;
            number++;}
        for(int i=1;i<size;i++){
        System.out.println(r[i]);}
        Sorting.insertionSort(r);
         long result;
         long startTime = System.nanoTime();
         long endTime = System.nanoTime();
         result = endTime-startTime;
         System.out.println("Execution time is  " + result + " nanoseconds");
    }
}

2 个答案:

答案 0 :(得分:1)

你实际上并没有对排序进行计时:

     Sorting.insertionSort(r);
     long result;
     long startTime = System.nanoTime();
     long endTime = System.nanoTime();
     result = endTime-startTime;

注意你先排序,然后计算时间差,好吧,没有做任何事情(startTimeendTime之间没有分配代码)。相反,这样做:

     long result;
     long startTime = System.nanoTime();
     Sorting.insertionSort(r);
     long endTime = System.nanoTime();
     result = endTime-startTime;

这样,endTime - startTime跨越了排序操作。

答案 1 :(得分:0)

根据Precision vs. accuracy of System.nanoTime(),无法保证它返回的值的频率会发生变化。只是因为在你调用函数两次之间已经过了4000纳秒并不意味着值已经改变了。

工作中的精确度与准确度。