2016-12-15 5 views
0

Warum bekomme ich die gleiche Zeit für die Auswahl und Blasensortieren. All meine Art Methoden funktionieren einwandfrei, aber ich genaue Zeit für Blase und Auswahl sortiert genommen bekommen ..Zeit für die Sortierung mit Blasensortierung und Sortierung Sortierung

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

Ich fand Ihren Fehler ... '" Zeit für Blase = "+ (Dauer * 1.0E-9)' sollte '" Zeit für Blase = "+ (Dauer1 * 1.0E-9)' sein. Zweitens, verwenden Sie ein paar Millionen Stichproben. – Shark

+1

In erster Linie, ein Benchmark einmal auszuführen ist unwahrscheinlich, etwas außer dem JIT zu benchmarken. Mit welchen Parametern laufen Sie? Ein paar Millionen? –

+0

Sie werden den Unterschied der Leistungsgeschwindigkeit bei einem größeren Beispiel sehen. siehe http://stackoverflow.com/questions/10428336/insertion-sort-better-than-bubble-sort für eine Diskussion dazu. – dreamer

Antwort

3

Weil Sie drucken duration zweimal, in dem zweiten Druck sollten Sie duration1 verwenden.

Weiter, wie Boris in den Kommentaren schrieb: das ist nicht die Art, Benchmarking zu tun. Verwenden Sie besser ein Benchmarking-Framework, das sich um das Aufwärmen der JVM kümmert und die beiden Methoden mehrmals ausführt, um eine durchschnittliche Laufzeit und etv.

Verwandte Themen