{"id":4053,"date":"2024-09-19T13:15:52","date_gmt":"2024-09-19T11:15:52","guid":{"rendered":"https:\/\/www.capri-soft.de\/blog\/?p=4053"},"modified":"2024-09-19T13:15:52","modified_gmt":"2024-09-19T11:15:52","slug":"algorithmen-und-datenstrukturen-der-optimierte-bubble-sort-in-java","status":"publish","type":"post","link":"https:\/\/www.capri-soft.de\/blog\/?p=4053","title":{"rendered":"Algorithmen und Datenstrukturen: Der optimierte Bubble Sort in Java"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Der Algorithmus<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dieser Algorithmus ist eine Erweiterung des normalen Bubble Sort Algorithmus. Wie dieser wird hierbei ein Array durchlaufen und das Element der aktuellen Iteration mit dem Nachfolgeelement getauscht, wenn dieses kleiner ist. Dadurch blubbern die Zahlen vom Array-Anfang bis zum Ende in einen sortierten Bereich auf der rechten Seite des Arrays nach oben.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der optimierte Bubble Sort-Algorithmus bricht weitere Iterationen ab, wenn er in in seiner if-Bedingung nichts mehr zum Tauschen gefunden hat. Dies vermerkt er in einer bool-Variable, was die umgebende do\u2026while-Schleife nutzt um den Algorithmus abzubrechen.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\npackage AlgoDat;\n \npublic class OptimizedBubbleSort {\n    \/\/ Zu sortierendes Array\n    private int myArray&#x5B;] = {22, 6, 2, 4, 10, 3, 9, 7, 5, 8, 1};\n \n    \/\/ H\u00e4lt die Klasse als instanziertes Objekt\n    @SuppressWarnings(&quot;unused&quot;)\n    private static OptimizedBubbleSort program;\n \n    \/\/ Hilfsfunktion f\u00fcr das Ausgeben des Arrays\n    public void OutputOfIntArray(int myArray&#x5B;])\n    {\n        if (myArray != null)\n        {\n            for (int i = 0; i &lt; myArray.length; i++) {\n                if (i &gt; 0) System.out.print(&quot;;&quot;);\n                System.out.print(myArray&#x5B;i]);\n            }\n \n            System.out.println();\n        }\n    }\n \n    \/\/ Konstruktor\n    public OptimizedBubbleSort()\n    {\n        System.out.print(&quot;Vorher: &quot;);\n        this.OutputOfIntArray(myArray);\n \n        \/\/ Da wir eine do .. while-Schleife nun nutzen,\n        \/\/ z\u00e4hlen wir einen Index darin runter um diesen\n        \/\/ im Array jederzeit adressieren zu k\u00f6nnen.\n        int sortierterBereichRechts = myArray.length;\n \n        \/\/ Wenn in einer Iteration nix getauscht wurde\n        \/\/ wird das f\u00fcr alle weiteren auch der Fall sein.\n        \/\/ In dem Fall kann der Algorithmus enden.\n        boolean hatteNochWasZuTun = false;\n \n        do\n        {\n            \/\/ Am Anfang gibts nix zu tun\n            hatteNochWasZuTun = false;   \n \n            System.out.println(&quot;Iteration: &quot; + (myArray.length - sortierterBereichRechts + 1));\n \n            for (int i = 0; i &lt; sortierterBereichRechts - 1; i++)\n            {\n                if (myArray&#x5B;i] &gt; myArray&#x5B;i + 1])\n                {\n                    this.vertausche(myArray, i, i + 1);\n                    System.out.print(&quot;Tausche: &quot;);\n                    this.OutputOfIntArray(myArray);\n                    hatteNochWasZuTun = true;\n                }\n            }\n             \n            \/\/ Der sortierte Bereich w\u00e4chst\n            sortierterBereichRechts--;\n        }\n        while (hatteNochWasZuTun);\n \n        System.out.print(&quot;Nachher: &quot;);\n        this.OutputOfIntArray(myArray);\n    }\n \n    public void vertausche(int&#x5B;] arrayToSwap, int idx1, int idx2)\n    {\n        int swapVar = arrayToSwap&#x5B;idx1];\n        arrayToSwap&#x5B;idx1] = arrayToSwap&#x5B;idx2];\n        arrayToSwap&#x5B;idx2] = swapVar;\n    }\n \n    public static void main(String&#x5B;] args) \n    {\n        \/\/ Instanziere aus den statischem Programm ein echtes Objekt\n        \/\/ damit nicht alle Methoden und Variablen static sein m\u00fcssen.\n        program = new OptimizedBubbleSort();\n    }\n}\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Ausgabe<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nVorher: 22;6;2;4;10;3;9;7;5;8;1\nIteration: 1\nTausche: 6;22;2;4;10;3;9;7;5;8;1\nTausche: 6;2;22;4;10;3;9;7;5;8;1\nTausche: 6;2;4;22;10;3;9;7;5;8;1\nTausche: 6;2;4;10;22;3;9;7;5;8;1\nTausche: 6;2;4;10;3;22;9;7;5;8;1\nTausche: 6;2;4;10;3;9;22;7;5;8;1\nTausche: 6;2;4;10;3;9;7;22;5;8;1\nTausche: 6;2;4;10;3;9;7;5;22;8;1\nTausche: 6;2;4;10;3;9;7;5;8;22;1\nTausche: 6;2;4;10;3;9;7;5;8;1;22\nIteration: 2\nTausche: 2;6;4;10;3;9;7;5;8;1;22\nTausche: 2;4;6;10;3;9;7;5;8;1;22\nTausche: 2;4;6;3;10;9;7;5;8;1;22\nTausche: 2;4;6;3;9;10;7;5;8;1;22\nTausche: 2;4;6;3;9;7;10;5;8;1;22\nTausche: 2;4;6;3;9;7;5;10;8;1;22\nTausche: 2;4;6;3;9;7;5;8;10;1;22\nTausche: 2;4;6;3;9;7;5;8;1;10;22\nIteration: 3\nTausche: 2;4;3;6;9;7;5;8;1;10;22\nTausche: 2;4;3;6;7;9;5;8;1;10;22\nTausche: 2;4;3;6;7;5;9;8;1;10;22\nTausche: 2;4;3;6;7;5;8;9;1;10;22\nTausche: 2;4;3;6;7;5;8;1;9;10;22\nIteration: 4\nTausche: 2;3;4;6;7;5;8;1;9;10;22\nTausche: 2;3;4;6;5;7;8;1;9;10;22\nTausche: 2;3;4;6;5;7;1;8;9;10;22\nIteration: 5\nTausche: 2;3;4;5;6;7;1;8;9;10;22\nTausche: 2;3;4;5;6;1;7;8;9;10;22\nIteration: 6\nTausche: 2;3;4;5;1;6;7;8;9;10;22\nIteration: 7\nTausche: 2;3;4;1;5;6;7;8;9;10;22\nIteration: 8\nTausche: 2;3;1;4;5;6;7;8;9;10;22\nIteration: 9\nTausche: 2;1;3;4;5;6;7;8;9;10;22\nIteration: 10\nTausche: 1;2;3;4;5;6;7;8;9;10;22\nIteration: 11\nNachher: 1;2;3;4;5;6;7;8;9;10;22\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Komplexit\u00e4t: O-Notation (Ordnung)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Worst- und Average-Case<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Wie beim normalen Bubble Sort betr\u00e4gt die Laufzeit-Komplexit\u00e4t im normalen und durchschnittlichen Fall\u00a0<strong>O(n\u00b2).<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Best-Case<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Im Best-Case bricht der Algorithmus aber bereits nach einer Iteration ab, was einer Laufzeitkomplexit\u00e4t von\u00a0<strong>O(n)\u00a0<\/strong>entspricht.<\/p>\n<iframe src=\"http:\/\/www.facebook.com\/plugins\/like.php?href=https%3A%2F%2Fwww.capri-soft.de%2Fblog%2F%3Fp%3D4053&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\" style=\"border:none; overflow:hidden; width:450px;margin-top:5px;\"><\/iframe>","protected":false},"excerpt":{"rendered":"<p>Der Algorithmus Dieser Algorithmus ist eine Erweiterung des normalen Bubble Sort Algorithmus. Wie dieser wird hierbei ein Array durchlaufen und das Element der aktuellen Iteration mit dem Nachfolgeelement getauscht, wenn dieses kleiner ist. Dadurch blubbern die Zahlen vom Array-Anfang bis zum Ende in einen sortierten Bereich auf der rechten Seite des Arrays nach oben. Der &hellip; <a href=\"https:\/\/www.capri-soft.de\/blog\/?p=4053\" class=\"more-link\"><span class=\"screen-reader-text\">Algorithmen und Datenstrukturen: Der optimierte Bubble Sort in Java<\/span> weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[475,15,3],"tags":[454,467,493,466,496,477,487,497,494,495,498,462,492],"class_list":["post-4053","post","type-post","status-publish","format-standard","hentry","category-algorithmen-und-datenstrukturen","category-java","category-programmierung","tag-algodat","tag-algorithmen-und-datenstrukturen","tag-array-sortieren","tag-bubble-sort","tag-in-place","tag-laufzeit","tag-o-notation","tag-optimieren","tag-optimiert","tag-optimierung-bubble-sort","tag-ordnung","tag-sortieren","tag-sortierverfahren"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4yGeN-13n","jetpack_likes_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/4053","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4053"}],"version-history":[{"count":1,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/4053\/revisions"}],"predecessor-version":[{"id":4054,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/4053\/revisions\/4054"}],"wp:attachment":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4053"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4053"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}