2013-04-19 3 views
1

Я хочу видеть, сколько времени понадобилось для сортировки пузырьков для сортировки всего элемента в массиве. Как измерить время?Сроки выполнения сортировки пузырьков

public class Bubble { 
    static int[] nums = {5, 4, 3, 2, 1}; 

    public static void main(String[] args) { 
     bubble(nums); 
     for(int i=0; i<nums.length; i++){ 
      System.out.print(nums[i] + " "); 
     } 
    } 

    // bubble sort 
    public static void bubble(int[] unsorted){ 
     int temp; 
     boolean sorted = false; 
     int length = unsorted.length; 

     while(!sorted){ 
      sorted = true; 

      for(int i=0; i<length-1; i++){ 
       if(unsorted[i] > unsorted[i+1]){ 
        temp = unsorted[i]; 
        unsorted[i] = unsorted[i+1]; 
        unsorted[i+1] = temp; 
        sorted = false; 
       } 
      } 
     } 
    } 
} 
+0

'long time = System.currentTimeMillis(); пузырь (НУМС); System.out.println (System.currentTimeMillis() - время); ' –

+0

Возможный дубликат http://stackoverflow.com/questions/180158/how-do-i-time-a-methods-execution-in-java – halex

ответ

0

От ответа дислокация к how do I time a methods excecution in java:

Существует всегда старинке:

long startTime = System.nanoTime(); 
methodToTime(); 
long endTime = System.nanoTime(); 

long duration = endTime - startTime; 
0

Прямо перед вызовом:

bubble(nums); 

использование:

long time = System.nanoTime(); 

получить текущее системное время в наносекунд до рода. Затем сразу же после сортировки сделано, используйте:

time =- System.nanoTime(); 

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

0

Вы можете использовать этот код:

public static void main(String[] args) { 
    long t1 = System.nanoTime(); 
    bubble(nums); 
    for(int i=0; i<nums.length; i++){ 
     System.out.print(nums[i] + " "); 
    } 
    long t = (System.nanoTime() - t1)/1000000; 
    System.out.println("Elapsed time = " + t + " ms"); 

} 

Он будет отображать 0 мс. Это потому, что ваш массив слишком мал. Попробуйте с гораздо большим количеством предметов. Сложность - O (n²).

EDIT: вы можете использовать nanoTime без разделения, но наш компьютер не способен измерять время короче 1 мс. Таким образом, эта мера неверна. Лучше измерять с помощью большего количества элементов 1000, 2000, 3000 и т.д.

0
public static void main(String[] args) { 
    Date startTime = new Date(); 
    bubble(nums); 
    System.out.println(new Date().getTime() - startTime.getTime()); 
    for(int i=0; i<nums.length; i++){ 
     System.out.print(nums[i] + " "); 
    } 
} 
Смежные вопросы