Как измерить время выполнения с Java - PullRequest
0 голосов
/ 08 апреля 2019

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

Java:


class MergeSort {
void merge(int nums[], int left, int m, int right) {
    int n1 = m - left + 1;
    int n2 = right - m;

    int Left_part_arra[] = new int[n1];
    int Right_part_arra[] = new int[n2];

    for (int i = 0; i < n1; ++i)
    Left_part_arra[i] = nums[left + i];
    for (int j = 0; j < n2; ++j)
    Right_part_arra[j] = nums[m + 1 + j];

    int i = 0,
    j = 0;

    int k = left;
    while (i < n1 && j < n2) {
        if (Left_part_arra[i] <= Right_part_arra[j]) {
            nums[k] = Left_part_arra[i];
            i++;
        } else {
            nums[k] = Right_part_arra[j];
            j++;
        }
        k++;
    }

    while (i < n1) {
        nums[k] = Left_part_arra[i];
        i++;
        k++;
    }

    while (j < n2) {
        nums[k] = Right_part_arra[j];
        j++;
        k++;
    }
}

// merge()
void sort(int nums[], int left, int right) {
    if (left < right) {
        // Find the middle point
        int m = (left + right) / 2;

        // Sort first halve
        sort(nums, left, m);
        // Sort second halve
        sort(nums, m + 1, right);

        // Merge the sorted halves
        merge(nums, left, m, right);
    }
}

// Method to test above
public static void main(String args[]) {
    MergeSort ob = new MergeSort();
    int nums[] = {
        7,
        -5,
        3,
        2,
        1,
        0,
        45
    };
    System.out.println("Original Array:");
    System.out.println(Arrays.toString(nums));
    ob.sort(nums, 0, nums.length - 1);
    System.out.println("Sorted Array:");
    System.out.println(Arrays.toString(nums));

    long start = System.currentTimeMillis();
    long end = System.currentTimeMillis();
    System.out.println("Merge took: " + (end - start) + " milliseconds");
}
}

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Ваши start и end находятся рядом друг с другом, если вы хотите что-то рассчитать, начинать следует до операции, которую вы планируете, и заканчивать после.В этом случае они должны сэндвич ob.sort();

В качестве примечания, время сортировки обычно более информативно, когда сортируемая коллекция велика.Многие алгоритмы медленной сортировки могут показаться одинаково хорошими или даже лучше, чем более эффективный алгоритм при тестировании на небольшом размере выборки.

1 голос
/ 08 апреля 2019

Для того, чтобы это работало, перед этой строкой должна быть строка:

long start = System.currentTimeMillis(); 

:

ob.sort(nums, 0, nums.length-1);

Также имейте в виду, что это измерение времени и не Сложность времени

...