In diesem Labor werden Sie:
Implementieren Sie den Bubble Sort Algorithmus, um ein Array aufsteigend zu sortieren.
Vergleiche benachbarte Elemente und tausche sie, wenn sie in falscher Reihenfolge sind. Wiederhole, bis keine Tausche mehr noetig sind.
{64, 34, 25, 12, 22, 11, 90}#include <stdio.h> void printArray(int arr[], int n) { for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); } void bubbleSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { // Nach jedem Durchgang ist das groesste Element am Ende for (int j = 0; j < n - 1 - i; j++) { if (arr[j] > arr[j + 1]) { // Tausche int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } int main() { int arr[] = {64, 34, 25, 12, 22, 11, 90}; int n = 7; printf("Unsortiert: "); printArray(arr, n); bubbleSort(arr, n); printf("Sortiert: "); printArray(arr, n); return 0; }
Erweitern Sie Bubble Sort, um die Anzahl der Vergleiche und Tausche zu zaehlen.
#include <stdio.h> // Globale Variablen zum Zaehlen int vergleiche = 0; int tausche = 0; void printArray(int arr[], int n) { for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); } void bubbleSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - 1 - i; j++) { vergleiche++; // Jeder Vergleich wird gezaehlt if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; tausche++; // Nur wenn getauscht wird } } } } int main() { int arr[] = {64, 34, 25, 12, 22, 11, 90}; int n = 7; printf("Unsortiert: "); printArray(arr, n); bubbleSort(arr, n); printf("Sortiert: "); printArray(arr, n); printf("\nVergleiche: %d\n", vergleiche); printf("Tausche: %d\n", tausche); return 0; }
Kehren Sie die Reihenfolge der Elemente in einem Array um.
Tausche das erste Element mit dem letzten, das zweite mit dem vorletzten, usw.
{1, 2, 3, 4, 5, 6, 7}#include <stdio.h> void printArray(int arr[], int n) { for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); } void reverseArray(int arr[], int n) { int left = 0; int right = n - 1; while (left < right) { // Tausche links und rechts int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; // Indizes aufeinander zubewegen left++; right--; } } int main() { int arr[] = {1, 2, 3, 4, 5, 6, 7}; int n = 7; printf("Vorher: "); printArray(arr, n); reverseArray(arr, n); printf("Nachher: "); printArray(arr, n); return 0; }
Verschieben Sie alle Elemente um eine Position nach links. Das erste Element kommt ans Ende.
{10, 20, 30, 40, 50}#include <stdio.h> void printArray(int arr[], int n) { for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); } // Einmal nach links verschieben void shiftLeft(int arr[], int n) { int temp = arr[0]; // Erstes Element merken for (int i = 0; i < n - 1; i++) { arr[i] = arr[i + 1]; // Nach links schieben } arr[n - 1] = temp; // Erstes Element ans Ende } int main() { int arr[] = {10, 20, 30, 40, 50}; int n = 5; printf("Vorher: "); printArray(arr, n); shiftLeft(arr, n); printf("Nachher: "); printArray(arr, n); return 0; }
Pruefen Sie, ob ein Array ein Palindrom ist (vorwaerts und rueckwaerts gleich).
Ein Palindrom liest sich vorwaerts und rueckwaerts gleich.
{1, 2, 3, 2, 1} und {1, 2, 3, 4, 5}#include <stdio.h> void printArray(int arr[], int n) { for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); } int istPalindrom(int arr[], int n) { int left = 0; int right = n - 1; while (left < right) { if (arr[left] != arr[right]) { return 0; // Kein Palindrom } left++; right--; } return 1; // Ist Palindrom } int main() { int arr1[] = {1, 2, 3, 2, 1}; int n1 = 5; int arr2[] = {1, 2, 3, 4, 5}; int n2 = 5; printf("Array 1: "); printArray(arr1, n1); if (istPalindrom(arr1, n1)) { printf("-> Ist ein Palindrom!\n\n"); } else { printf("-> Ist KEIN Palindrom!\n\n"); } printf("Array 2: "); printArray(arr2, n2); if (istPalindrom(arr2, n2)) { printf("-> Ist ein Palindrom!\n"); } else { printf("-> Ist KEIN Palindrom!\n"); } return 0; }
| Thema | Wichtige Funktionen/Konzepte |
|---|---|
| Bubble Sort | Nachbarelemente vergleichen und tauschen |
| Array Reverse | Erstes mit letztem tauschen (von beiden Seiten) |
| Array Shift | Erstes merken, alle verschieben, ans Ende setzen |
| Palindrom | Von beiden Enden vergleichen |