[英]Why am I getting weird runtime in Java?
我有一個使用 quickSort 算法對數組 [500000] 進行排序的項目,我已經實現了這樣的 quickSort:
public void sort (int[] array){
sort(array, 0, array.length - 1);
}
private void sort (int[] array, int start, int end){
if (start >= end) {
return;
}
var boundary = partition(array, start, end);
sort(array, start, boundary - 1);
sort(array, boundary + 1, end);
}
private int partition(int[] array, int start, int end){
var pivot = array[end];
var boundary = start - 1;
for (int i = start; i <= end; i++)
if (array[i] <= pivot)
swap(array, i, ++boundary);
return boundary;
}
private void swap(int[] array, int index1, int index2){
var temp = array[index1];
array[index1] = array[index2];
array[index2] = temp;
}
所以我檢查它; 首先,我使用其他一些類(無需發布)創建包含500000 個元素的數組,然后我獲得該數組的副本,以便能夠再次將其用作未排序的。 當我將第一個數組傳遞給第一個對象並計算運行時,我得到大約 300 毫秒的時間,但是當我對第二個數組(第一個未排序數組的副本)進行排序時,我得到大約 150000 毫秒的時間。 問題是; 為什么這兩個由一個類組成的對象在非常不同的時間對同一個數組進行排序? 請注意,我同時使用了System.currentTimeMillies(); 和System.nanoTime(); , 沒有不同。 也在 linux 和 Window 上運行它,再次沒有區別。
編輯: 主類:
public static void main(String[] args) {
var arrayBuilder = new ArrayBuilder();
var firstArray = arrayBuilder.getArray();
var secondArray = arrayBuilder.getArray();
var quickSort1 = new QuickSort();
long firstSortStart = System.nanoTime();
quickSort1.sort(firstArray);
long firstSortEnd = System.nanoTime();
long firstSortTotal = firstSortEnd - firstSortStart;
System.out.format("Original QuickSort (Version 1) took %d nano seconds. \n", firstSortTotal);
var quickSort2 = new QuickSort();
long secondSortStart = System.nanoTime();
quickSort2.sort(secondArray);
long secondSortEnd = System.nanoTime();
long secondSortTotal = secondSortEnd - secondSortStart;
System.out.format("Changed QuickSort (Version 2) took %d nano seconds. \n", secondSortTotal);
// this takes ~183861470 nano seconds
quickSorter2.sort(copiedArray);
// this takes ~218316931575 nano secondes
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.