Public feed #890105

Vermischtes

public text v1 · immutable
Raw Edit
·published 2008-02-03 13:57 UTC
rendered paste body
import java.util.Random;


class Quicksort

{ 
private static boolean status;
  static < T extends Comparable > void feldAusgabe(T array[])
  { 
    System.out.println("Der Array sieht wie folgt aus: ");
    for (int i=0; i<=array.length-1; i++)
    {  System.out.print(array[i]);
       System.out.print(" ");
    }
    System.out.println();
  } 

  static <T> void vertausche (T array[], int a, int b)
  {  T ablage = array[a];
     array[a] = array[b];
     array[b] = ablage;
  } 
  public enum PivotSelection
  {
      erstes,
      mitte,
      letztes, 
      zufall,
      median;
   }
/**
 * Sorts an array in ascending order using the quick sort algorithm.
 * @param array The array to be sorted 
 * @param links = Laufindex bei dem angefangen werden soll 
 * @param rechts = laufindex vom Ende nach rechts ( wegen rekursivem aufruf )
 */
 
static < T extends Comparable > void quicksort(T[] array,int links, int rechts, PivotSelection pivotSelection)
{  
int nachlinks = rechts; 
int nachrechts = links; 
int median;
int mitte= ((links + rechts)/2) ;
T pivot;
 
    
  if (nachrechts - nachlinks >= 1)
      {
          { 
     switch ( pivotSelection )
           {
        case erstes: pivot = array[0];
        break;
        case mitte: pivot = array[mitte];
        break;
        case letztes: pivot = array[rechts];
        break;
        case zufall:
        Random zufall = new Random();
        int k = zufall.nextInt(array.length);
        pivot = array[k];
        break;
        case median: 
        if( array.length % 2 !=0)
        {
           median = (array.length)/2;
        }
           else 
           {
            median = ((array.length/2)+((array.length/2)+1)/2);
           }
           pivot = array[median];
           break;
           default : pivot = array[(nachrechts + nachlinks)/2];
           break;
        }
    }
           
         

         while (nachrechts <= nachlinks)
         {    
              while ((nachrechts < rechts) && (array[nachrechts].compareTo(pivot) <= 0))
                   nachrechts++;

            
              while ((nachlinks > links) && (array[nachlinks].compareTo(pivot) > 0))
                   nachlinks--;

             
              if (nachrechts <= nachlinks)
                   { vertausche(array,nachrechts, nachlinks);
                     nachrechts++;
                     nachlinks--;
                   }
         } 

         
         if (nachlinks > links) 
         {
             nachrechts = links;
             quicksort (array,links, nachlinks ,pivotSelection);

         
         if (nachrechts < rechts) quicksort (array,nachrechts, rechts, pivotSelection);

       }
       else    
        {
                return;                 
        }
}  

 
}
}