2016-12-15 10 views
0

選択とバブルソートに同じ時間がかかるのはなぜですか?あなたが二回durationを印刷しているので、あなたがduration1を使用すべき第2の印刷では、バブルソートと選択ソートを使用してソートするのにかかる時間

import java.util.Scanner; 
public class sorting{ 
    public static void selectionsort(double[] list, int a, int b, double temp, int length){ 
     double min; 
     int index=0; 
     /*for(int p=0;p<list.length;p++){ 
      System.out.println("input="+list[p]); 
     }*/ 
     int n=0; 
     int status=0; 
     while(n<length){ 
      min=list[n]; 
      for(int j=n;j<(length-1);j++){ 
       if(list[j+1]<min){ 
        min=list[j+1]; 
        index=(j+1); 
        status=1; 
       } 

      } 
      if(min!=list[n]){ 
       temp=list[n]; 
       //System.out.println("Original val="+temp); 
       //System.out.println("Before n="+n); 
       list[n]=min; 
       //System.out.println("After n="+n); 
       //System.out.println("switch val="+list[n]); 
       list[index]=temp; 
       //System.out.println("new switch val at="+index); 
       n++; 
       //System.out.println("Updated"); 
       /*for(int k=0;k<list.length;k++){ 
        System.out.println("Output="+list[k]); 
       }*/ 
      } 
      else 
       n++; 
     } 
     //System.out.println("Done selection:"); 
     /*for(int k=0;k<list.length;k++){ 
      System.out.println("Output="+list[k]); 
     }*/ 
    } 
    public static void bubblesort(double[] list, int a, int b, double temp, double length){ 
     /*for(int p=0;p<list.length;p++){ 
      System.out.println("inputb="+list[p]); 
     }*/ 
     while(length>=0){ 
      for(int k=0;k<=(length-2);k++){ 
       if(list[k]>list[k+1]){ 
        temp=list[k+1]; 
        list[k+1]=list[k]; 
        list[k]=temp; 
       } 
      } 
      length--; 
     } 
     //System.out.println("Done bubble:"); 
     /*for(int k=0;k<list.length;k++){ 
      System.out.println("Outputb="+list[k]); 
     }*/ 
    } 
    public static void main(String[] args){ 
     Scanner in=new Scanner(System.in); 
     System.out.println("Lower bound"); 
     int a=in.nextInt(); 
     System.out.println("High bound"); 
     int b=in.nextInt(); 
     System.out.println("how many elements?"); 
     int n=in.nextInt(); 
     double[] list=new double[n]; 
     double[] sel=new double[n]; 
     double[] bub=new double[n]; 
     for(int i=0;i<list.length;i++){//intializes the array 
      list[i]=((Math.random()*(b-a)))+a; 
     } 
     for(int h=0;h<sel.length;h++){//selection 
      sel[h]=list[h]; 
     } 
     for(int l=0;l<bub.length;l++){//bubble 
      bub[l]=list[l]; 
     } 
     double temp=0.0; 
     int length=list.length; 
     long startTime = System.nanoTime(); 
     selectionsort(sel,a,b,temp,length); 
     long duration = System.nanoTime() - startTime; 
     System.out.println("Time for selection="+(duration*1.0E-9)); 
     long startTime1 = System.nanoTime(); 
     bubblesort(bub,a,b,temp,length); 
     long duration1 = System.nanoTime() - startTime1; 
     System.out.println("Time for bubble="+(duration*1.0E-9)); 
    } 
} 
+0

バブルの時間= "+(継続時間* 1.0E-9)'はバブルの時間= "+(継続時間* 1.0E-9)にする必要があります。第2に、数百万のサンプルを使用する – Shark

+1

ベンチマークを1回実行することは、JIT以外のものをベンチマークすることはまずありません。どのパラメータを使用していますか?数百万? –

+0

大きなサンプルでは、​​パフォーマンスのスピードの違いがわかります。これに関する議論については、http://stackoverflow.com/questions/10428336/insertion-sort-better-than-bubble-sortを参照してください。 – dreamer

答えて

3

..私のすべてのソート方法が適切に機能しているが、私は、バブルと選択ソートのために撮影した正確な時刻を取得します。

さらに、Borisがコメントセクションに書いたように、これはベンチマークを行う方法ではありません。 JVMをウォーミングアップし、2つの方法を複数回実行して平均ランニング時間とetvを見つけるベンチマークフレームワークを使用することをお勧めします。

関連する問題