Advertisement
Guest User

Sortierung

a guest
Apr 21st, 2015
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.86 KB | None | 0 0
  1. public class Sortierung {
  2.     static int array[] ;
  3.     static java.util.Random numberGenerator = new java.util.Random() ;
  4.     static long tStart, tEnd, msecs ;
  5.     public static void main(String[] args) {
  6.         /*
  7.          * Es vergleicht, ob das Array größer als 1 ist, weil sonst das komplette Programm keinen Sinn ergibt.
  8.          * Wenn der erste Parameter keine Zahl ist, dann wird der Fehler gefangen plus das Programm beendet.
  9.          * Kommt es zur einer sonstigen Exception, wird die richtige Anwendung des Programms angezeigt.
  10.          */
  11.         try {
  12.             assert (Integer.parseInt(args[0]) > 1) : "Die Länge des Arrays muss größer als 1 sein!";
  13.             array = new int[Integer.parseInt(args[0])] ;
  14.         } catch (NumberFormatException nfe) {
  15.             System.out.println(" Fehler! Bitte geben Sie als ersten Parameter eine Zahl, die größer als 1 ist, ein!" + "\n" + "Folgende Eingaben werden akzeptiert:" + "\n"
  16.                 + "java Sortierung Feldgroesse [insert|merge [auf|ab|rand]]." + "\n"
  17.                 + "rand bzw. auf oder ab sind dabei OPTIONAL und bestimmen die Füllungsart des Feldes!") ;
  18.             System.exit(0) ;
  19.         } catch (Exception e) {
  20.             e.printStackTrace() ;
  21.             System.out.println("Fehler!" + "\n"
  22.                 + "Starten Sie das Programm wie folgt: java Sortierung Feldgroesse [insert|merge [auf|ab|rand]]." + "\n"
  23.                 + "rand bzw. auf oder ab sind dabei OPTIONAL und bestimmen die Füllungsart des Feldes!") ;
  24.             System.exit(0) ;
  25.         }
  26.         // Es prüft, ob 3 Parameter eingegeben sind.
  27.         // Wenn dies zutrifft, dann benutzt es die einzelnen Parameter und führt dementsprechend die Füllung, Zeitmessung und Sortierung aus.
  28.         if (args.length == 3) {
  29.             assert (args[2].equals("auf") || args[2].equals("ab") || args[2].equals("rand")) : "Der dritte Parameter muss entweder \"auf\", \"ab\" oder \"rand\" lauten!" ;
  30.             if (args[2].equals("auf")) {
  31.                 fillInAuf(array) ;
  32.             }
  33.             else if (args[2].equals("ab")){
  34.                 fillInAb(array) ;
  35.             }  
  36.             else {
  37.                 fillInRand(array) ;
  38.             }
  39.             assert (args[1].equals("insert") || args[1].equals("merge")) : "Der zweite Parameter muss entweder \"insert\" oder \"merge\" lauten!" ;
  40.             if (args[1].equals("insert")) {
  41.                 tStart = System.currentTimeMillis() ;
  42.                 insertionSort(array) ;
  43.                 tEnd = System.currentTimeMillis() ;
  44.             }
  45.             else {
  46.                 tStart = System.currentTimeMillis() ;
  47.                 mergeSort(array,0,array.length-1) ;
  48.                 tEnd = System.currentTimeMillis() ;
  49.             }          
  50.             // Wenn nur 2 Parameter vorhanden sind, dann prüft es, welche da sind und füllt das Array per fillInrand.
  51.             // Es sortiert danach das Array mit InsertionSor ODER MergeSort.
  52.         }
  53.         else if (args.length == 2) {
  54.             assert (args[1].equals("insert") || args[1].equals("merge")) : "Der zweite Parameter muss entweder \"insert\" oder \"merge\" lauten!" ;
  55.             fillInRand(array) ;
  56.             if (args[1].equals("insert")) {
  57.                 tStart = System.currentTimeMillis() ;
  58.                 insertionSort(array) ;
  59.                 tEnd = System.currentTimeMillis() ;
  60.             }
  61.             else {
  62.                 tStart = System.currentTimeMillis() ;
  63.                 mergeSort(array,0,array.length-1) ;
  64.                 tEnd = System.currentTimeMillis() ;
  65.             }
  66.         }
  67.         else if (args.length == 1) {
  68.             fillInRand(array) ;
  69.             tStart = System.currentTimeMillis() ;
  70.             mergeSort(array,0,array.length-1) ;
  71.             tEnd = System.currentTimeMillis() ;
  72.         }
  73.         msecs = tEnd - tStart ;
  74.         // Wenn das Array HÖCHSTENS 100 Elemente enthält, soll das Feld wiedergegeben werden.
  75.         if (array.length <= 100) {
  76.             printArray(array) ;
  77.         }
  78.         // Die Meldung über den Zustand der Sortierung.
  79.         if (isSorted(array)) {
  80.             System.out.println("Das Feld ist sortiert!") ;
  81.         }
  82.         else {
  83.             System.out.println("Das Feld ist NICHT sortiert!") ;
  84.         }
  85.         // Zeitmessung
  86.         System.out.println("Die Sortierung dauerte: " + msecs + " millisekunden!");        
  87.     }
  88.     // Die Befüllung in aufsteigender Reihenfolge.
  89.     public static void fillInAuf(int[] array) {
  90.         for (int i=0;i<array.length;i++) {
  91.             array[i] = i ;
  92.         }
  93.     }
  94.     // Die Befüllung in absteigender Reihenfolge.
  95.     public static void fillInAb(int[] array) {
  96.         int counter = array.length-1 ;
  97.         for (int i=0;i<array.length;i++) {
  98.             array[i] = counter ;
  99.             counter-- ;
  100.         }
  101.     }
  102.     // Die Befüllung in zufälliger Reihenfolge.
  103.     public static void fillInRand(int[] array) {
  104.         for (int i=0;i<array.length;i++) {
  105.             array[i] = numberGenerator.nextInt();
  106.         }
  107.     }
  108.     // Das Array wird auf Sortierung geprüft.
  109.     public static boolean isSorted(int[] array) {
  110.         for (int i=0;i<array.length-1;i++) {
  111.             if (!(array[i] < array[i+1])) {
  112.                 return false;
  113.             }
  114.         }
  115.         return true;
  116.     }
  117.     // Es zeigt das Array auf der Konsole.
  118.     public static void printArray(int[] array) {
  119.         for (int i=0 ; i<array.length ; i++) {
  120.             System.out.println(array[i]) ;
  121.         }
  122.     }
  123.     // Der InsertionSort Algorithmus.
  124.     public static void insertionSort(int[] array) {
  125.         for (int j=1 ; j<array.length ; j++) {
  126.             int key = array[j] ;
  127.             int i = j ;
  128.             while(i>0 && array[i-1] > key) {
  129.                 array[i] = array[i-1] ;
  130.                 i-- ;
  131.             }
  132.             array[i] = key ;
  133.         }
  134.     }
  135.     // Der MergeSort Algorithmus.
  136.     public static void mergeSort(int[] array, int left, int right) {
  137.         if (left < right) {
  138.             int q = (left + right) / 2 ;
  139.             mergeSort(array, left, q) ;
  140.             mergeSort(array,q+1, right) ;
  141.             merge(array,left, q, right) ;
  142.         }
  143.     }
  144.     // Die Hilfsmethode für MergeSort.
  145.     public static void merge(int[] array, int left, int center, int right) {
  146.         int[] arr = new int[array.length] ;
  147.         int i, j ;
  148.         for (i = left; i <= center; i++) {
  149.             arr[i] = array[i] ;
  150.         }
  151.         for (j = center + 1; j <= right; j++) {
  152.             arr[right + center + 1 - j] = array[j];
  153.         }
  154.         i = left;
  155.         j = right;
  156.         for (int k = left ; k <= right ; k++) {
  157.             if (arr[i] <= arr[j]) {
  158.                 array[k] = arr[i] ;
  159.                 i++ ;
  160.             } else {
  161.                 array[k] = arr[j] ;
  162.                 j-- ;
  163.             }
  164.         }
  165.     }
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement