我想獲得不同數組大小的各種排序方法的總耗用時間。我能夠獲得大小= 100,1000,10000和100000的流逝時間,但是當我嘗試1000000時,它只是繼續運行而沒有給出結果(我假設1000000太大了?)。有沒有什麼辦法可以在合理的時間內使用nanoTime獲得經過的時間?任何幫助將是偉大的!Java:使用System.nanoTime()排序功能花費太長的時間來執行
我的程序:
import java.util.Random;
public class Sorting {
public static void printArray(int[] array) {
System.out.print("The Array: ");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
}
public static void exchange(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static void selectionSort(int[] array) {
for (int fill = 0; fill < array.length - 2; fill++) {
int minPos = fill;
for (int j = fill + 1; j < array.length; j++) {
if (array[j] < array[minPos]) {
minPos = j;
}
}
exchange(array, fill, minPos);
}
}
public static void bubbleSort(int[] array) {
for(int last = array.length - 1; last > 0; last--){
for(int i = 0; i < last; i ++){
if(array[i + 1] < array[i]){
exchange(array, i, i + 1);
}
}
}
}
public static void main(String[] args) {
int size = 1000000;
Random rand = new Random();
int[] arrayToSort = new int[size];
for (int i = 0; i < size; i++) {
arrayToSort[i] = rand.nextInt(size);
}
//printArray(arrayToSort);
long startSelect = System.nanoTime();
selectionSort(arrayToSort);
long estSelectTime = System.nanoTime() - startSelect;
System.out.println("elapsed time after Selection sort for n = " + size + " : " + estSelectTime);
//printArray(arrayToSort);
// long startBubble = System.nanoTime();
// bubbleSort(arrayToSort);
// long estBubTime = (System.nanoTime() - startBubble)/size;
// System.out.println("elapsed time after Bubble sort for n = " + size + " : " + estBubTime);
//printArray(arrayToSort);
}
}
好的,有趣的問題,但你有沒有嘗試過,例如,Caliper?它是否重現了這種行爲? – fge
爲什麼你認爲'nanoTime'花費的時間太長,而不是你的排序功能? –
氣泡排序以二次方式運行,因此對於添加的每個零點,排序將花費100倍的時間。 – Thomas