{"id":4700,"date":"2024-05-13T15:40:06","date_gmt":"2024-05-13T15:40:06","guid":{"rendered":"https:\/\/msgprogramator.sk\/?p=4700"},"modified":"2026-02-17T11:03:48","modified_gmt":"2026-02-17T11:03:48","slug":"bubble-sort","status":"publish","type":"post","link":"https:\/\/msgprogramator.sk\/de\/bubble-sort\/","title":{"rendered":"Bubble sort &#8211; Blasen-Sortierung in Java"},"content":{"rendered":"<p><a href=\"https:\/\/msgprogramator.sk\/de\/sortieralgorithmen\/\">Sortieralgorithmen<\/a> werden verwendet, um die Elemente eines Arrays oder einer Liste in aufsteigender oder absteigender numerischer oder lexikografischer Reihenfolge neu zu ordnen. Die Sortierung von Daten ist sehr wichtig f\u00fcr die optimale Leistung anderer Algorithmen, die sortierte Eingabedaten ben\u00f6tigen.<\/p>\n<p>Es gibt eine Reihe von verschiedenen Sortieralgorithmen. Die Auswahl eines geeigneten Algorithmus h\u00e4ngt von Faktoren wie der Gr\u00f6\u00dfe und den Eigenschaften der Eingabedaten, dem verf\u00fcgbaren Speicher und den Zeit- und Platzanforderungen ab.<\/p>\n<p>Um Ihnen die Auswahl zu erleichtern, stellen wir Ihnen in unserer Serie die bekanntesten Datensortieralgorithmen vor, erkl\u00e4ren ihre Prinzipien, Vor- und Nachteile und programmieren sie in Java.<\/p>\n<p>Heute werden wir uns mit <strong>Bubble<\/strong> Sort besch\u00e4ftigen.<\/p>\n<h2>Algorithmus f\u00fcr Bubble sort<\/h2>\n<p>Bubble Sort ist ein Sortieralgorithmus, der nacheinander jeweils zwei benachbarte Elemente vergleicht und sie verwirft, bis sie in der gew\u00fcnschten Reihenfolge sortiert sind. Der Algorithmus erfordert mehrere Iterationen.<\/p>\n<p>Der Name des Algorithmus ist von den Luftblasen abgeleitet, die im Wasser an die Oberfl\u00e4che steigen. Analog dazu steigen bei dem Algorithmus die Elemente des Arrays in jeder Iteration bis zum Ende des unsortierten Teils des Arrays auf.<\/p>\n<h2>Bubble Sort Algorithmus &#8211; Funktionsprinzip<\/h2>\n<p>Angenommen, wir m\u00f6chten die Elemente in aufsteigender Reihenfolge sortieren. Wenn ein Array nur ein Element hat, gilt es als sortiert, andernfalls m\u00fcssen die Elemente sortiert werden.<\/p>\n<h3>Erste Iteration:<\/h3>\n<p>Alle zwei benachbarten Array-Elemente werden der Reihe nach vom Anfang des Arrays an verglichen. Wenn das erste Element gr\u00f6\u00dfer ist als das zweite, tauschen sie die Reihenfolge. Dann wird das zweite Element mit dem dritten verglichen, das dritte mit dem vierten, und so weiter. Die erste Iteration endet mit dem Vergleich der letzten benachbarten Elemente.<\/p>\n<p>W\u00e4hrend der ersten Iteration wird durch das Vertauschen der Elemente garantiert, dass das gr\u00f6\u00dfte Element des Arrays an das Ende des Arrays gelangt.<\/p>\n<h3>Andere Iterationen:<\/h3>\n<p>Der letzte Index des Arrays wird als sortiert betrachtet, der Rest des Arrays ist noch nicht sortiert. F\u00fcr den unsortierten Teil des Arrays wird das Verfahren aus der ersten Iteration wiederholt. Bei jeder Iteration wird das gr\u00f6\u00dfte Element an das Ende des unsortierten Arrays vorgeblasen. Dies wird so lange wiederholt, bis das Array sortiert ist.<\/p>\n<p><strong>Anzahl der Iterationen: n-1<\/strong><br \/>\n<strong>Anzahl der Vergleiche: n*(n-1)\/2<\/strong><\/p>\n<h3>Beispiel<\/h3>\n<p>Wir haben das folgende Array mit den Elementen [3][1][2]. Aus den Formeln berechnen wir, dass die Anzahl der ben\u00f6tigten Iterationen 2 und die Anzahl der Vergleiche 6 betr\u00e4gt.<\/p>\n<p>In der ersten Iteration finden die folgenden Operationen statt: [1][3][2] -&gt; [1][2][3]. Das gr\u00f6\u00dfte Element 3 wird auf den letzten Index des Arrays abgebildet. Obwohl das Array bereits sortiert ist, wird eine zweite Iteration durchgef\u00fchrt, bei der die ersten beiden Elemente des Arrays verglichen werden. Da das erste und das zweite Element die richtige Reihenfolge haben, wird ihre Reihenfolge nicht vertauscht.<\/p>\n<h2>Optimierung des Bubble Sort Algorithmus<\/h2>\n<p>Im obigen Beispiel haben wir gesehen, dass, wenn wir das Array bereits sortiert haben, dennoch unn\u00f6tigerweise zus\u00e4tzliche Iterationen und Vergleiche durchgef\u00fchrt werden. Das erh\u00f6ht nat\u00fcrlich die Laufzeit des Algorithmus. Die L\u00f6sung besteht darin, dass wir bei jeder Iteration feststellen, ob es eine Neuordnung zweier Elemente gibt. Wenn nicht, betrachten wir das Array als sortiert und f\u00fchren keine weiteren Iterationen durch. Diese Optimierung reduziert die Zeitkomplexit\u00e4t f\u00fcr ein bereits sortiertes Array und gew\u00e4hrleistet die Anpassungsf\u00e4higkeit des Algorithmus.<\/p>\n<h2>Vorteile des Bubble-Sortieralgorithmus<\/h2>\n<ul>\n<li>Es ist leicht zu verstehen und umzusetzen<\/li>\n<li>Ben\u00f6tigt beim Sortieren keinen zus\u00e4tzlichen Speicherplatz<\/li>\n<li>Es ist stabil, d.h. zwei identische Elemente aus der Eingabe behalten ihre relative Reihenfolge im Ergebnis bei<\/li>\n<\/ul>\n<h2>Nachteil des Bubble-Sortieralgorithmus<\/h2>\n<ul>\n<li>Die Zeitkomplexit\u00e4t ist O(n\u00b2), was ihn zu einem langsamen Algorithmus f\u00fcr einen gro\u00dfen Datensatz macht.<\/li>\n<\/ul>\n<h2>Zeitaufwand f\u00fcr Bubble sort<\/h2>\n<table width=\"496\">\n<thead>\n<tr>\n<th rowspan=\"2\" width=\"87\"><strong>Algorithmus<\/strong><\/th>\n<th rowspan=\"2\" width=\"77\"><strong>Methode<\/strong><\/th>\n<th colspan=\"3\" width=\"192\"><strong>Zeitliche Komplexit\u00e4t<\/strong><\/th>\n<th rowspan=\"2\" width=\"76\"><strong>Speicher<\/strong><\/th>\n<th rowspan=\"2\" width=\"64\"><strong>Stabil<\/strong><\/th>\n<\/tr>\n<tr>\n<th width=\"68\"><strong>schlechteste<\/strong><\/th>\n<th width=\"59\"><strong>durchschnittlich<\/strong><\/th>\n<th width=\"65\"><strong>beste<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td width=\"87\">Bubble sort<\/td>\n<td width=\"77\">Austausch<\/td>\n<td width=\"68\">O(n\u00b2)<\/td>\n<td width=\"59\">O(n\u00b2)<\/td>\n<td width=\"65\">O(n)<\/td>\n<td width=\"76\">O(1)<\/td>\n<td width=\"64\">Ja<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Bubble sort Animation, Visualisierung, gif<\/h2>\n<p>Die Visualisierung des Bubble-Sortieralgorithmus sieht folgenderma\u00dfen aus:<\/p>\n<figure id=\"attachment_3626\" aria-describedby=\"caption-attachment-3626\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3624 size-full\" src=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/05\/Bubble-sort-example-300px.gif\" alt=\"Bubble sort Animation\" width=\"300\" height=\"180\" \/><figcaption id=\"caption-attachment-3626\" class=\"wp-caption-text\">Swfung8, CC BY-SA 4.0, via Wikimedia Commons<\/figcaption><\/figure>\n<figure id=\"attachment_3623\" aria-describedby=\"caption-attachment-3623\" style=\"width: 500px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3621 size-full\" src=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/05\/Bubblesort_Animation.gif\" alt=\"Bubble sort Animation\" width=\"500\" height=\"500\" \/><figcaption id=\"caption-attachment-3623\" class=\"wp-caption-text\">Cocrider69, CC BY-SA 4.0, via Wikimedia Commons<\/figcaption><\/figure>\n<p style=\"text-align: center\"><em>Quelle: commons.wikimedia.org\/wiki\/Category:Animations_of_sort_algorithms<\/em><\/p>\n<p>Eine Animation des Algorithmus findest du zum Beispiel unter <a href=\"https:\/\/www.toptal.com\/developers\/sorting-algorithms\" target=\"_blank\" rel=\"nofollow noopener\">Toptal.<\/a> Es gibt 8 Arten von Algorithmen, Sie k\u00f6nnen die Animation auch r\u00fcckw\u00e4rts abspielen.<\/p>\n<p>Auf dieser <a href=\"https:\/\/www.hackerearth.com\/practice\/algorithms\/sorting\/bubble-sort\/visualize\/\" target=\"_blank\" rel=\"nofollow noopener\">Seite <\/a> kannst du die einzelnen Schritte des Algorithmus durchgehen, wodurch du die Zeitkomplexit\u00e4t des Algorithmus \u00fcberpr\u00fcfen kannst.<\/p>\n<h2>Bubble Sort Implementierung &#8211; Beispiel in Java<\/h2>\n<p>Lassen Sie uns eine optimierte Version von Bubble Sort in Java programmieren.<\/p>\n<p><strong><u>BubbleSort.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package sorting;\n\n\/\/ An optimized version of Bubble Sort\npublic class BubbleSort {\n    private boolean change;\n    private int temp;\n\n    public void sort(int data[])\n    {\n        for (int i = 0; i &lt; data.length - 1; i++) {\n            System.out.println(i + 1 + &quot;. iteration&quot;);\n            change = false;\n            for (int j = 0; j &lt; data.length - i - 1; j++) {\n                if (data[j] &gt; data[j + 1]) {\n                    \/\/ Swap arr[j] and arr[j+1]\n                    temp = data[j];\n                    data[j] = data[j + 1];\n                    data[j + 1] = temp;\n                    change = true;\n                    printArray(data);\n                }\n            }\n            \/\/ If no two elements swapped, then end the sort method\n            if (!change)\n                return;\n        }\n    }\n\n    \/\/ Function to print an array\n    public void printArray(int data[])\n    {\n        for (int i = 0; i &lt; data.length; i++)\n            System.out.print(data[i] + &quot; &quot;);\n        System.out.println();\n    }\n}<\/code><\/pre>\n<p><strong><u>Main.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">import sorting.BubbleSort;\n\npublic class Main {\n    public static void main(String[] args) {\n        int dataToSort[] = { 6, 5, 4, 2, 3, 1, 7 };\n        BubbleSort bubbleSort = new BubbleSort();\n        System.out.print(&quot;Input: &quot;);\n        bubbleSort.printArray(dataToSort);\n        bubbleSort.sort(dataToSort);\n        System.out.print(&quot;Sorted: &quot;);\n        bubbleSort.printArray(dataToSort);\n    }\n}<\/code><\/pre>\n<p>Die Ausgabe dieses Beispiels ist:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3319\" src=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/05\/bubble-sort-vystup-prikladu-1.webp\" alt=\"Beispiel f\u00fcr die Bubble sort Ausgabe\" width=\"326\" height=\"600\" srcset=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/05\/bubble-sort-vystup-prikladu-1.webp 434w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/05\/bubble-sort-vystup-prikladu-1-163x300.webp 163w\" sizes=\"auto, (max-width: 326px) 100vw, 326px\" \/><\/p>\n<p>Wir haben die Dateien mit dem oben genannten Beispiel in Form von Code vorbereitet, den Sie direkt in <a href=\"https:\/\/msgprogramator.sk\/java\/\">Java<\/a> ausf\u00fchren k\u00f6nnen. Lade den <a href=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/05\/BubbleSort.zip\">Bubble Sort-Code in <strong>Java<\/strong><\/a> hier herunter.<\/p>\n<p>Wenn du ein <a href=\"https:\/\/msg-life.sk\/de\/stellenangebote\/java-entwickler-senior\/\">Java Programmierer<\/a> bist und nach Arbeit suchst, schau dir unsere <a href=\"https:\/\/msg-life.sk\/de\/mitarbeiter-benefits\/\">Mitareiterbenefits <\/a> an und reagiere auf die <a href=\"https:\/\/msg-life.sk\/de\/stellenangebote\/\">neuesten Stellenangebote<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Artikel erf\u00e4hrst du, was Bubblesort ist, sein Prinzip, seine Vorteile und Nachteile sowie ein Beispiel f\u00fcr Java-Code.<\/p>\n","protected":false},"author":14,"featured_media":3306,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[57],"tags":[],"class_list":["post-4700","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/4700","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/comments?post=4700"}],"version-history":[{"count":7,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/4700\/revisions"}],"predecessor-version":[{"id":9686,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/4700\/revisions\/9686"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media\/3306"}],"wp:attachment":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media?parent=4700"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/categories?post=4700"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/tags?post=4700"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}