Расчет среднего времени выполнения функции в java - PullRequest
0 голосов
/ 05 марта 2020

Я выполняю простую сортировку 1000 раз и пытаюсь получить среднее время, необходимое для завершения (а затем сравнить с другой сортировкой) на основе определенной пользователем длины массива. Моя проблема в том, что когда я пытаюсь получить время, оно всегда равно 0. Я давно не кодировал и не вижу свою ошибку.

import java.util.Scanner;

public class TimingExpBubble2 {
    public static long average(long[] arr){
        int sum = 0; 

        for (int i = 0; i < arr.length; i++) 
            sum += arr[i]; 

        return sum / arr.length; 
    }
    public static void main(String args[]) {
        Scanner reader = new Scanner(System.in);
        System.out.println("Enter array length: ");
        int x = reader.nextInt();
        long[] time = new long[1000];
        for(int i = 0; i < 1000; i++)
        {
            int[] arr = new int[x];
            for(int j = 0; j < arr.length; j++) {
                arr[j] = (int) (Math.random() * 5000);
            }
            long start = System.currentTimeMillis();

            for (int l = 0; l < arr.length - 1; l++) {
                for (int j = 1; j < arr.length - i; j++) {
                    if (arr[j - 1] > arr[j]) {
                        int temp = arr[j - 1];
                        arr[j - 1] = arr[j];
                        arr[j] = temp;
                    }
                }
            }
            reader.close();
            long end = System.currentTimeMillis();
            time[i] = (end - start);
        }
        System.out.println("Average time in Miliseconds: " + average(time));
    }

}
'''

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Вам нужно использовать System.nanoTime() вместо System.currentTimeMillis()

0 голосов
/ 05 марта 2020

Я понял это с помощью друга. мне нужно было поставить мои временные переменные и измерения как двойные, так как суммы были настолько малы, и это помогло просто использовать бегущую переменную, а не массив '' '

time = time + (end - start);
        }
        System.out.println("Average time in Miliseconds: " + (time / 1000));

' ''

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...