{"id":3969,"date":"2024-08-06T13:37:35","date_gmt":"2024-08-06T11:37:35","guid":{"rendered":"https:\/\/www.capri-soft.de\/blog\/?p=3969"},"modified":"2024-08-07T09:08:33","modified_gmt":"2024-08-07T07:08:33","slug":"algorithmen-und-datenstrukturen-der-insertion-sort-in-java","status":"publish","type":"post","link":"https:\/\/www.capri-soft.de\/blog\/?p=3969","title":{"rendered":"Algorithmen und Datenstrukturen: Der Insertion Sort in Java"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Der Algorithmus<\/h2>\n\n\n\n<p>Markant sind die zwei verschachtelten Schleifen, wobei die innere Schleife meistens eine While-Schleife mit 2 Bedingungen ist. Ein Index, welcher die Position der Trennung vom sortierten (links) und vom unsortierten (rechts) Bereich pr\u00e4sentiert, wird runtergez\u00e4hlt und das Array-Element an der Index-Position entspricht nach Ende der Schleife der Array-Position, mit der ein gemerktes Element getauscht werden kann. W\u00e4hrend der sortierte Bereich (immer links) mit <em>dem ersten Element<\/em> des unsortierten Bereichs (immer rechts), welches sich gemerkt wird, verglichen wird, werden alle Elemente bis zu diesem Punkt um eins nach rechts ger\u00fcckt. Dadurch existiert die zu tauschende Position nach diesem Schritt zwei Mal und wird durch das gemerkte Element ausgetauscht.<\/p>\n\n\n\n<p>Die zweite Bedingung der inneren While-Schleife verhindert, das der runterz\u00e4hlende Index negativ wird. <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\npackage AlgoDat;\n\nclass InsertionSort {\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 InsertionSort als instanziertes Objekt\n    @SuppressWarnings(&quot;unused&quot;)\n    private static InsertionSort 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 InsertionSort()\n    {\n        this.OutputOfIntArray(myArray);\n\n        \/\/ Bei 1 beginnen, da das Element mit dem Index 0 bereits als sortiert gilt \n        for (int idxSortierterBereich = 1; idxSortierterBereich &lt; myArray.length; idxSortierterBereich++)\n        {\n            \/\/ Merke dir das erste Element vom unsortierten Bereich\n            int swapVar = myArray&#x5B;idxSortierterBereich];\n            System.out.println(&quot;Gemerkt vor dem Aufr\u00fccken: &quot; + swapVar);\n\n            \/\/ Das erste unsortierte Element auf der rechten Seite wird in den bereits sortierten Bereich \n            \/\/ auf der linken Seite eingef\u00fcgt, womit der unsortierte Bereich immer weiter nach rechts r\u00fcckt\n            \/\/ und dann verschwindet.\n            int idxUnsortierterBereich = idxSortierterBereich; \n            System.out.println(&quot;Der unsortierte Bereich beginnt bei Index: &quot; + idxUnsortierterBereich);\n\n            \/\/ Laufe im Array von rechts nach links, so lange wie vorige Element noch gr\u00f6\u00dfer wie \n            \/\/ das erste Element vom unsortierten Bereich ist und der Bereich nicht negativ wird\n            while (idxUnsortierterBereich &gt; 0 &amp;&amp; myArray&#x5B;idxUnsortierterBereich - 1] &gt; swapVar)\n            {\n                \/\/ Alles eins nach rechts im Array r\u00fccken bis zum bereits sortierten Bereich\n                myArray&#x5B;idxUnsortierterBereich] = myArray&#x5B;idxUnsortierterBereich - 1] ;\n                idxUnsortierterBereich--;\n\n                System.out.print(&quot;Nach rechts aufr\u00fccken: &quot;);\n                this.OutputOfIntArray(myArray);\n            }\n\n            System.out.println(&quot;Tausche Stelle &quot; + (idxUnsortierterBereich + 1) + &quot; (&quot; + myArray&#x5B;idxUnsortierterBereich] + \n            &quot;) mit gemerkter Stelle &quot; + (idxSortierterBereich + 1) + &quot; (&quot; + swapVar + &quot;)&quot;);\n\n            myArray&#x5B;idxUnsortierterBereich] = swapVar;\n\n            System.out.print(&quot;Getauscht: &quot;);\n            this.OutputOfIntArray(myArray);\n        }\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 InsertionSort();\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=\"\">\n22;6;2;4;10;3;9;7;5;8;1\nGemerkt vor dem Aufr\u00fccken: 6\nDer unsortierte Bereich beginnt bei Index: 1\nNach rechts aufr\u00fccken: 22;22;2;4;10;3;9;7;5;8;1\nTausche Stelle 1 (22) mit gemerkter Stelle 2 (6)\nGetauscht: 6;22;2;4;10;3;9;7;5;8;1\nGemerkt vor dem Aufr\u00fccken: 2\nDer unsortierte Bereich beginnt bei Index: 2\nNach rechts aufr\u00fccken: 6;22;22;4;10;3;9;7;5;8;1\nNach rechts aufr\u00fccken: 6;6;22;4;10;3;9;7;5;8;1\nTausche Stelle 1 (6) mit gemerkter Stelle 3 (2)\nGetauscht: 2;6;22;4;10;3;9;7;5;8;1\nGemerkt vor dem Aufr\u00fccken: 4\nDer unsortierte Bereich beginnt bei Index: 3\nNach rechts aufr\u00fccken: 2;6;22;22;10;3;9;7;5;8;1\nNach rechts aufr\u00fccken: 2;6;6;22;10;3;9;7;5;8;1\nTausche Stelle 2 (6) mit gemerkter Stelle 4 (4)\nGetauscht: 2;4;6;22;10;3;9;7;5;8;1\nGemerkt vor dem Aufr\u00fccken: 10\nDer unsortierte Bereich beginnt bei Index: 4\nNach rechts aufr\u00fccken: 2;4;6;22;22;3;9;7;5;8;1\nTausche Stelle 4 (22) mit gemerkter Stelle 5 (10)\nGetauscht: 2;4;6;10;22;3;9;7;5;8;1\nGemerkt vor dem Aufr\u00fccken: 3\nDer unsortierte Bereich beginnt bei Index: 5\nNach rechts aufr\u00fccken: 2;4;6;10;22;22;9;7;5;8;1\nNach rechts aufr\u00fccken: 2;4;6;10;10;22;9;7;5;8;1\nNach rechts aufr\u00fccken: 2;4;6;6;10;22;9;7;5;8;1\nNach rechts aufr\u00fccken: 2;4;4;6;10;22;9;7;5;8;1\nTausche Stelle 2 (4) mit gemerkter Stelle 6 (3)\nGetauscht: 2;3;4;6;10;22;9;7;5;8;1\nGemerkt vor dem Aufr\u00fccken: 9\nDer unsortierte Bereich beginnt bei Index: 6\nNach rechts aufr\u00fccken: 2;3;4;6;10;22;22;7;5;8;1\nNach rechts aufr\u00fccken: 2;3;4;6;10;10;22;7;5;8;1\nTausche Stelle 5 (10) mit gemerkter Stelle 7 (9)\nGetauscht: 2;3;4;6;9;10;22;7;5;8;1\nGemerkt vor dem Aufr\u00fccken: 7\nDer unsortierte Bereich beginnt bei Index: 7\nNach rechts aufr\u00fccken: 2;3;4;6;9;10;22;22;5;8;1\nNach rechts aufr\u00fccken: 2;3;4;6;9;10;10;22;5;8;1\nNach rechts aufr\u00fccken: 2;3;4;6;9;9;10;22;5;8;1\nTausche Stelle 5 (9) mit gemerkter Stelle 8 (7)\nGetauscht: 2;3;4;6;7;9;10;22;5;8;1\nGemerkt vor dem Aufr\u00fccken: 5\nDer unsortierte Bereich beginnt bei Index: 8\nNach rechts aufr\u00fccken: 2;3;4;6;7;9;10;22;22;8;1\nNach rechts aufr\u00fccken: 2;3;4;6;7;9;10;10;22;8;1\nNach rechts aufr\u00fccken: 2;3;4;6;7;9;9;10;22;8;1\nNach rechts aufr\u00fccken: 2;3;4;6;7;7;9;10;22;8;1\nNach rechts aufr\u00fccken: 2;3;4;6;6;7;9;10;22;8;1\nTausche Stelle 4 (6) mit gemerkter Stelle 9 (5)\nGetauscht: 2;3;4;5;6;7;9;10;22;8;1\nGemerkt vor dem Aufr\u00fccken: 8\nDer unsortierte Bereich beginnt bei Index: 9\nNach rechts aufr\u00fccken: 2;3;4;5;6;7;9;10;22;22;1\nNach rechts aufr\u00fccken: 2;3;4;5;6;7;9;10;10;22;1\nNach rechts aufr\u00fccken: 2;3;4;5;6;7;9;9;10;22;1\nTausche Stelle 7 (9) mit gemerkter Stelle 10 (8)\nGetauscht: 2;3;4;5;6;7;8;9;10;22;1\nGemerkt vor dem Aufr\u00fccken: 1\nDer unsortierte Bereich beginnt bei Index: 10\nNach rechts aufr\u00fccken: 2;3;4;5;6;7;8;9;10;22;22\nNach rechts aufr\u00fccken: 2;3;4;5;6;7;8;9;10;10;22\nNach rechts aufr\u00fccken: 2;3;4;5;6;7;8;9;9;10;22\nNach rechts aufr\u00fccken: 2;3;4;5;6;7;8;8;9;10;22\nNach rechts aufr\u00fccken: 2;3;4;5;6;7;7;8;9;10;22\nNach rechts aufr\u00fccken: 2;3;4;5;6;6;7;8;9;10;22\nNach rechts aufr\u00fccken: 2;3;4;5;5;6;7;8;9;10;22\nNach rechts aufr\u00fccken: 2;3;4;4;5;6;7;8;9;10;22\nNach rechts aufr\u00fccken: 2;3;3;4;5;6;7;8;9;10;22\nNach rechts aufr\u00fccken: 2;2;3;4;5;6;7;8;9;10;22\nTausche Stelle 1 (2) mit gemerkter Stelle 11 (1)\nGetauscht: 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<p>O(T(n)) = O(n^2\/2+n\/2-n) = O(n^2\/2) = O (n^2)<\/p>\n\n\n\n<p>Die \u00e4u\u00dfere Schleife l\u00e4uft von 1 bis n-1, w\u00e4hrend die innere While-Schleife vom ersten Element des unsortierten Bereichs bis zu der Stelle der richtige Einf\u00fcgeposition l\u00e4uft. <\/p>\n\n\n\n<p>\u00c4u\u00dfere Schleife: Iteriert n-1 mal.<br>Innere Schleife: Iteriert 1x f\u00fcr Element 1, 2x f\u00fcr Element 2, 3x f\u00fcr Element 3, &#8230; n mal f\u00fcr Element n, was zu einer Laufzeit von<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2024\/08\/image-1.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"232\" height=\"21\" data-attachment-id=\"3984\" data-permalink=\"https:\/\/www.capri-soft.de\/blog\/?attachment_id=3984\" data-orig-file=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2024\/08\/image-1.png?fit=232%2C21&amp;ssl=1\" data-orig-size=\"232,21\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2024\/08\/image-1.png?fit=232%2C21&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2024\/08\/image-1.png?resize=232%2C21&#038;ssl=1\" alt=\"\" class=\"wp-image-3984\" style=\"width:221px;height:auto\"\/><\/a><\/figure>\n\n\n\n<p>f\u00fchrt. Daraus folgt:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2024\/08\/image-2.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"437\" height=\"52\" data-attachment-id=\"3987\" data-permalink=\"https:\/\/www.capri-soft.de\/blog\/?attachment_id=3987\" data-orig-file=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2024\/08\/image-2.png?fit=437%2C52&amp;ssl=1\" data-orig-size=\"437,52\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2024\/08\/image-2.png?fit=437%2C52&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2024\/08\/image-2.png?resize=437%2C52&#038;ssl=1\" alt=\"\" class=\"wp-image-3987\" srcset=\"https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2024\/08\/image-2.png?w=437&amp;ssl=1 437w, https:\/\/i0.wp.com\/www.capri-soft.de\/blog\/wp-content\/uploads\/2024\/08\/image-2.png?resize=300%2C36&amp;ssl=1 300w\" sizes=\"auto, (max-width: 437px) 100vw, 437px\" \/><\/a><\/figure>\n\n\n\n<p>Additive Bestandteile, Faktoren und Konstanten fallen bei der Bestimmung der  Ordnung weg, daher ist die Ordnung O(n\u00b2). Die Dom\u00e4ne ist der dominante Teil der Ordnung &#8211; sie ist n\u00b2 .<\/p>\n\n\n\n<p><\/p>\n<iframe src=\"http:\/\/www.facebook.com\/plugins\/like.php?href=https%3A%2F%2Fwww.capri-soft.de%2Fblog%2F%3Fp%3D3969&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 Markant sind die zwei verschachtelten Schleifen, wobei die innere Schleife meistens eine While-Schleife mit 2 Bedingungen ist. Ein Index, welcher die Position der Trennung vom sortierten (links) und vom unsortierten (rechts) Bereich pr\u00e4sentiert, wird runtergez\u00e4hlt und das Array-Element an der Index-Position entspricht nach Ende der Schleife der Array-Position, mit der ein gemerktes Element &hellip; <a href=\"https:\/\/www.capri-soft.de\/blog\/?p=3969\" class=\"more-link\"><span class=\"screen-reader-text\">Algorithmen und Datenstrukturen: Der Insertion 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_post_was_ever_published":false,"_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}},"categories":[15,3],"tags":[454,459,458,456,455,460,457,463,461,462],"class_list":["post-3969","post","type-post","status-publish","format-standard","hentry","category-java","category-programmierung","tag-algodat","tag-algorithmen","tag-algorithmus","tag-drittes-semester","tag-erstes-semester","tag-insertion-sort","tag-java","tag-sort-algorithm","tag-sortieralgorithmus","tag-sortieren"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4yGeN-121","jetpack_likes_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3969","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=3969"}],"version-history":[{"count":11,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3969\/revisions"}],"predecessor-version":[{"id":4000,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3969\/revisions\/4000"}],"wp:attachment":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3969"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3969"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3969"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}