AuK/Teile und Herrsche 1 SS09/JavaQuick

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Java</language>
== Quicksort in Java ==

'''Der Algorithmus'''

<code id="4bbdf8447d420">
public class Quicksorter
{
    private int[] a;
    private int n;

    public void sort(int[] a)
    {
        this.a=a;
        n=a.length;
        quicksort(0, n-1);
    }

    private void quicksort (int lo, int hi)
    {
        int i=lo, j=hi;
        int x=a[(lo+hi)/2];

        //  Aufteilung
        while (i<=j)
        {    
            while (a[i]<x) i++; 
            while (a[j]>x) j--;
            if (i<=j)
            {
                exchange(i, j);
                i++; j--;
            }
        }

        // Rekursion
        if (lo<j) quicksort(lo, j);
        if (i<hi) quicksort(i, hi);
    }

    private void exchange(int i, int j)
    {
        int t=a[i];
        a[i]=a[j];
        a[j]=t;
    }
    public int[] getArray(){
    	return this.a;
    }

}    // end class QuickSorter
</code>

<code id="4bbdf8447dccb" hidden>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.*;
public class Main {

	
	public static void main(String[] args) {
		
		// Angabe der Listengröße
		
		System.out.println("Wieviele Werte sollen es denn sein?(Zur Anzeige der Werte bitte maximal 50 Werte verlangen)");
		int temp = Integer.parseInt(read());
		int a[] = new int[temp];
		
		// Beginn der Zeitmessung für die Werterzeugung
		
		long start = System.currentTimeMillis();
		
		// Erzeugung der Werte mit Zufallszahlen
		
		for(int i = 0; i < temp; i++){
			a[i] =(int)(1+Math.random()*100000);
		}
		
		// Ende der Zeitmessung für die Werterzeugung
		
		long stop = System.currentTimeMillis();		
		double elapsedinput = (stop - start) / 1000.0;
      
        
		if(temp < 51){
			System.out.println("Ihr Array unsortiert: ");
		
			for(int i = 0; i < temp; i++){
				System.out.println(a[i] + " ");
			}			
		}
		else
        	System.out.println("Die Liste ist zu lang und beeinflusst die Zeitberechnung");
		
		Quicksorter quick = new Quicksorter();
		
		//Start der Zeitmessung für das Sortieren
		
		start = System.currentTimeMillis();
		
		// Übergabe der Liste an Quicksort
		
		quick.sort(a);
		
		 // Ende der Zeitmessung für das Sortieren
		
		 stop = System.currentTimeMillis();
	        double elapsed = (stop - start) / 1000.0;
	        
	       
	        if(temp < 51){
	        	System.out.println("\nIhr Array sortiert: ");
	        	for(int i = 0; i < temp; i++){
	        		
				System.out.println(a[i] + " ");
				}
			}
	        else
	        	System.out.println("Die Liste ist zu lang und beeinflusst die Zeitberechnung");
	        
	        System.out.println("Generating input:  " + elapsedinput + " seconds");
	        System.out.println("Quicksort: " + elapsed + " seconds");
	}
	public static String read(){
		String temp = "";
		BufferedReader eingabe = new BufferedReader( new InputStreamReader(System.in));
		try{
			temp = eingabe.readLine();
		}
		catch(IOException e){
			System.out.println("Fehler");
		}
		return temp;
	}

}

</code>

<eval id="4bbdf8447e3c9">
</eval>