commit bbad929f969f98fcc0667f7bf52d0a6cde900fb4 Author: fdai7303 Date: Mon Nov 20 10:11:45 2023 +0100 Ordner angelegt für Algodat - Übung 04 - Testat 01 diff --git a/Suchalgorythmen.java b/Suchalgorythmen.java new file mode 100644 index 0000000..293da02 --- /dev/null +++ b/Suchalgorythmen.java @@ -0,0 +1,86 @@ +import java.util.Arrays; +import java.util.Random; +import java.util.stream.IntStream; + +public class Suchalgorythmen { + public static void main(String[] args) { + + int[] list1 = IntStream.generate(() -> new Random().nextInt(100)).limit(100).toArray(); + int[] list2 = Arrays.copyOf(list1, list1.length); + + // aufruf lineare Suche + System.out.print("COUNTINGSORT: "); + long timeStart = System.nanoTime(); + COUNTINGSORT(list1); + long timeEnd = System.nanoTime(); + // System.out.println(Arrays.toString(list1)); + System.out.print(" Verlaufszeit: " + (timeEnd - timeStart) + " Nanosek."); + System.out.println(""); + + // aufruf binäre Suche + System.out.print("RADIXSORT: "); + timeStart = System.nanoTime(); + RADIXSORT(list2, 0, list2.length - 1); + timeEnd = System.nanoTime(); + // System.out.println(Arrays.toString(list2)); + System.out.print(" Verlaufszeit: " + (timeEnd - timeStart) + " Nanosek."); + System.out.println(""); + } + + public static void COUNTINGSORT(int[] elements) { + int maxValue = maxValue(elements); + int[] counts = new int[maxValue + 1]; + // Phase 1: Count + for (int element : elements) { + counts[element]++; + } + // Phase 2: Aggregate + for (int i = 1; i <= maxValue; i++) { + counts[i] += counts[i - 1]; + } + // Phase 3: Write to target array + int[] target = new int[elements.length]; + for (int i = elements.length - 1; i >= 0; i--) { + int element = elements[i]; + target[--counts[element]] = element; + } + // Copy target back to input array + //System.arraycopy(target, 0, elements, 0, elements.length); + System.out.println(Arrays.toString(target)); + } + + public static int maxValue(int[] chars) { + int max = chars[0]; + for (int ktr = 0; ktr < chars.length; ktr++) { + if (chars[ktr] > max) { + max = chars[ktr]; + } + } + return max; + } + + // vorraussetzung: eingabe Array muss sortiert sein + public static void RADIXSORT(int arr[], int low, int high) { + + // Find the maximum number to + // know number of digits + int m = maxValue(arr); + + // Do counting sort for every digit. + // Note that instead of passing digit + // number, exp is passed. exp is 10^i + // where i is current digit number + for (int exp = 1; m / exp > 0; exp *= 10) + COUNTINGSORT(arr, exp); + } + + static void random(int arr[], int low, int high) { + + Random rand = new Random(); + int pivot = rand.nextInt(high - low) + low; + + int temp1 = arr[pivot]; + arr[pivot] = arr[high]; + arr[high] = temp1; + } +} \ No newline at end of file diff --git a/blatt04.pdf b/blatt04.pdf new file mode 100644 index 0000000..e29182e Binary files /dev/null and b/blatt04.pdf differ