Advertisement
Guest User

sortierung java

a guest
Apr 23rd, 2014
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.56 KB | None | 0 0
  1. public class Sortierung
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.         java.util.Random numberGenerator = new java.util.Random();
  6.         try
  7.         {
  8.             //Überprüft ob ein Parameter für die Feldgröße angegeben wurde und gibt eine Fehlermeldung aus wenn dies nicht der Fall ist
  9.             if(args.length < 1 || args.length > 3)
  10.             {
  11.                 System.out.println("Bitte Feldgröße als ersten Parameter, Sortierungsart als zweiten Parameter und die Befüllungsart des Arrays als dritten Parameter angeben");
  12.             }
  13.             else
  14.             {
  15.                 //Verändert den Parameter vom String zum Int
  16.                 int size = Integer.parseInt(args[0]);
  17.                 //Überprüft ob falsche Parameter angegben wurden und gibt eine Fehlermeldung aus
  18.                 if(size < 0 )
  19.                 {
  20.                     System.out.println("Bitte Feldgröße als positive ganze Zahl angeben");
  21.                 }
  22.                 else
  23.                 {
  24.                     //Erstellt ein Array mit der größe des ersten Parameters
  25.                     int arr[] = new int[size];
  26.                     //Füllt das Array mit zufälligen Zahlen wenn kein zweiter Parameter oder "rand" als Parameter angegben wird
  27.                     if( (args.length == 3 && args[2] == "rand" ) || args.length<3)
  28.                     {
  29.                         for(int i = 0; i < arr.length; i++)
  30.                         {
  31.                             arr[i] = numberGenerator.nextInt();
  32.                         }
  33.                         System.out.println("Befüllungsart Random");
  34.                     }
  35.                     //Füllt das Array aufsteigend wenn "auf" als zweiter Parameter angegben wird
  36.                     else if(args[2] == "auf")
  37.                     {
  38.                         for(int i = 0 ; i < arr.length; i++)
  39.                         {
  40.                             arr[i] = numberGenerator.nextInt();
  41.                         }
  42.                         mergeSort(arr, 0, arr.length-1);
  43.                         System.out.println("Befüllungsart aufsteigend");
  44.                     }
  45.                     //Füllt das Array absteigend wenn "ab" als zweiter Parameter angegeben wird
  46.                     else if(args[2] == "ab")
  47.                     {
  48.                         for(int i = 0; i < arr.length; i++)
  49.                         {
  50.                              arr[i] = numberGenerator.nextInt();
  51.                         }
  52.                         insertionSortDescending(arr);
  53.                         System.out.println("Befüllungsart absteigend");                        
  54.                     }
  55.                     else
  56.                     {
  57.                         System.out.println("Zweiter Parameter ist für Befüllungsart des Arrays : random, auf, ab");
  58.                     }
  59.                     if(args.length > 1 && args[1] == "insert")
  60.                     {
  61.                             System.out.println("InsertionSort");
  62.                             //Laufzeit Überprüfung InsertionSort
  63.                             long tStart, tEnd, msecs;
  64.                             tStart = System.currentTimeMillis();
  65.                             //Sortiert das Array mit InsertionSort
  66.                             insertionSort(arr);
  67.                             tEnd = System.currentTimeMillis();
  68.                             msecs = tEnd - tStart;
  69.                             //Gibt die Laufzeit in Millisekunden aus
  70.                             System.out.println(msecs);
  71.                     }
  72.                     else if((args.length == 2 && args[1] == "merge" ) || args.length<2)
  73.                     {
  74.                             System.out.println("MergeSort");
  75.                             //Laufzeit Überprüfung MergeSort
  76.                             long tStart, tEnd, msecs;
  77.                             tStart = System.currentTimeMillis();
  78.                             //Sortiert das Array mit MergeSort
  79.                             mergeSort(arr, 0, arr.length-1);
  80.                             tEnd = System.currentTimeMillis();
  81.                             msecs = tEnd - tStart;
  82.                             //Gibt die Laufzeit in Millisekunden aus
  83.                             System.out.println(msecs);
  84.                        
  85.                     }
  86.                     //Gibt aus ob das Feld aufsteigend sortiert ist oder nicht
  87.                     if(isSorted(arr))
  88.                     {
  89.                         System.out.println("Feld sortiert!");
  90.                     }
  91.                     else
  92.                     {
  93.                         System.out.println("Feld NICHT sortiert!");
  94.                     }
  95.                     if(size<101)
  96.                     {
  97.                         for(int i=0; i < arr.length; i++)
  98.                         {
  99.                             System.out.print(arr[i] + " ");
  100.                         }
  101.                     }
  102.                 }
  103.             }
  104.  
  105.         }
  106.         //Fängt exception wenn kein int wert als Parameter angegben wird und gibt eine Fehlermeldung aus
  107.         catch(NumberFormatException e)
  108.         {
  109.             System.out.println("Bitte Feldgröße in einer ganzen Zahl eingeben");
  110.         }
  111.        
  112.     }
  113.     //Methode für InsertionSort
  114.     public static void insertionSort(int[] array)
  115.     {
  116.         int key = 0;
  117.         for(int j = 0; j < array.length; j++)
  118.         {
  119.             key = array[j];
  120.             int i = j-1;
  121.             while(i>=0 && array[i]>key)
  122.             {
  123.                 array[i+1] = array[i];
  124.                 i = i-1;
  125.             }
  126.             array[i+1] = key;
  127.         }
  128.     }
  129.    
  130.     //InsertionSort absteigend
  131.     public static void insertionSortDescending(int[] array)
  132.     {
  133.         int key = 0;
  134.         for(int j = 0; j < array.length; j++)
  135.         {
  136.             key = array[j];
  137.             int i = j-1;
  138.             while(i>=0 && array[i]<key)
  139.             {
  140.                 array[i+1] = array[i];
  141.                 i = i-1;
  142.             }
  143.             array[i+1] = key;
  144.         }
  145.     }
  146.    
  147.     //Methode zum überprüfen ob das array aufsteigend sortiert ist
  148.     public static boolean isSorted(int[] array)
  149.     {
  150.         boolean check = true;
  151.         for(int i=0; i < array.length-1; i++)
  152.         {
  153.             if(array[i] > array[i+1])
  154.             {
  155.                 check = false;
  156.             }
  157.         }
  158.         return check;
  159.     }
  160.    
  161.     public static void mergeSort(int[] array, int p, int r)
  162.     {
  163.         if(p<r)
  164.         {
  165.             int q = (p+r)/2;
  166.             mergeSort(array, p, q);
  167.             mergeSort(array, q+1, r);
  168.             merge(array, p, q, r);
  169.         }
  170.     }
  171.    
  172.     //merge Methode vereint die zwei Teile aus mergeSort
  173.     public static void merge(int[] array, int low, int middle, int high)
  174.     {
  175.         //Erstellt ein Hilfsarray
  176.         int arr[] = new int[array.length];
  177.         for (int i = low; i <= high; i++)
  178.         {
  179.             arr[i] = array[i];
  180.         }
  181.  
  182.         int i = low;
  183.         int j = middle + 1;
  184.         int k = low;
  185.         // Kopiert das kleinste Element ins Ursprungsarray
  186.         while (i <= middle && j <= high)
  187.         {
  188.             if (arr[i] <= array[j])
  189.             {
  190.                 array[k] = arr[i];
  191.                 i++;
  192.             } else
  193.             {
  194.                 array[k] = arr[j];
  195.                 j++;
  196.             }
  197.             k++;
  198.         }
  199.         // Kopiert den rest des linken Teils ins Array
  200.         while (i <= middle)
  201.         {
  202.             array[k] = arr[i];
  203.             k++;
  204.             i++;
  205.         }
  206.     }
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement