2017-03-29 10 views
0

さまざまなサイズのさまざまな配列を並べ替える必要があります。私のタイマーは私にナノ秒で非常に短い時間を与えていますが、ほとんどゼロです。問題を修正しようとしているタイマーの開始と終了を変更しましたが、失敗しました。誰か私のタイマーの問題は何かを私に見せてもらえますか?タイミングJavaバブルソートアルゴリズム

import java.util.Random; 
import java.util.Scanner; 


public class BubbleSort 
{ 
    public static void main(String[] args) { 
     Random rand = new Random(); 
     Scanner input = new Scanner(System.in); 

    int m; 
    int n = 0; 
    int num_i = 0; 
    long startTime = System.nanoTime(); 
    long running_time; 
    int temp; 
    System.out.print("Input array size: "); 
    n = input.nextInt(); 
    System.out.print("Input number of arrays: "); 
    num_i = input.nextInt(); 

    for(int j = 0; j < num_i; j++){ 


    } 
    int array[] = new int [n]; 


    for(int i = 0; i < n; i++) 
    { 

     for(m = 0; m < array.length; m++){ 

     array[m] = (int)(Math.random()*100); 
     } 

    //int[] sorted = new int[n]; 
    for (int k = 0; k < array.length; k++) { 

     for (int j = 1; j < (array.length - k); j++) { 


      //System.out.println("Start Time: " + startTime); 
       startTime =System.nanoTime(); 

      if (array[j - 1] > array[j]) { 
       temp = array[j - 1]; 
       array[j - 1] = array[j]; 
       array[j] = temp; 

      } 
      long endTime = System.nanoTime(); 
      running_time = endTime - startTime; 
     // System.out.println("End Time: " + endTime); 
      System.out.println(running_time); 
     } 


    } 

    } 

    } 
} 
+0

あなたのコードは、タイマーが測定できるよりも速いです、それは問題です。 –

答えて

0

一つの問題は、コードが唯一それがあればとスワップコード全体ではなく、バブルソートにかかる時間をテストしています。私は約30,000の数字をソートするのに約1秒かかる単純化されたバージョンを作った。

ほとんどのシステムでは、コンピュータとオペレーティングシステムによっては、タイマーの周波数がナノ秒単位ではありません。私のシステムでは、インテル3770K 3.5 GHz、Windows 7 64ビットモードでは、タイマーは3.410312 mhz、つまり "tick"あたり約293.2283ナノ秒で動作します。 Windows XPでは、タイマーは約3.5GHz、つまり「ダニ」あたり約2857ナノ秒で動作しますが、これはおそらくまれです。

テストで経過時間がゼロになった場合は、より大きいアレイでテストしてください。何度でもテストを繰り返すことができますが、複数の実行からのデータのキャッシュは結果に影響します。

public static void main (String args[]) 
    { 
     Random rand = new Random(); 
     int m; 
     long startTime; 
     long endTime; 
     long running_time; 
     int temp; 
     int n = 30000;  // set to value rather than input from user 
     int array[] = new int [n]; 

     for(m = 0; m < array.length; m++){ 
      array[m] = (int)(Math.random()*100); 
     } 

     // benchmark sort time 
     startTime =System.nanoTime(); 
     for (int k = 0; k < array.length; k++) { 
      for (int j = 1; j < (array.length - k); j++) { 
       if (array[j - 1] > array[j]) { 
        temp = array[j - 1]; 
        array[j - 1] = array[j]; 
        array[j] = temp; 
       } 
      } 
     } 
     endTime = System.nanoTime(); 
     running_time = endTime - startTime; 
     System.out.println(running_time); 
    } 
} 
+0

私は10,000/10,000で走ろうとしましたが、同じ結果を得ました。 – user3403708

+0

@ user3403708 - 私は自分の答えを更新しました。 if/swapステートメントのタイミングとは対照的に、バブルソート全体の所要時間を測定したいと思っています。私のシステムでは、30,000の数値でコードから1つのバブルソートを実行するのに約1秒かかります。バブルソートが実際にデータをソートしているかどうかをチェックしませんでした。 – rcgldr

関連する問題