{"id":4701,"date":"2024-05-17T16:40:48","date_gmt":"2024-05-17T16:40:48","guid":{"rendered":"https:\/\/msgprogramator.sk\/?p=4701"},"modified":"2026-02-17T11:10:04","modified_gmt":"2026-02-17T11:10:04","slug":"comb-sort","status":"publish","type":"post","link":"https:\/\/msgprogramator.sk\/de\/comb-sort\/","title":{"rendered":"Comb sort &#8211; Kamm-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 ist sehr wichtig f\u00fcr die optimale Leistung anderer Algorithmen, die sortierte Eingabedaten ben\u00f6tigen. 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. Um Ihnen die Auswahl zu erleichtern, werden wir in unserer Serie die bekanntesten Datensortieralgorithmen nacheinander vorstellen, ihre Prinzipien, Vor- und Nachteile erkl\u00e4ren und sie in Java programmieren. Heute werden wir uns <strong>Comb sort<\/strong> ansehen.<\/p>\n<h2>Comb sort Algoritmus<\/h2>\n<p>Comb sort ist ein Sortieralgorithmus, der von dem polnischen Informatiker W\u0142odzimierz Dobosiewicz erfunden wurde, um Sortieralgorithmen zu verbessern, die auf der Methode der Elementersetzung basieren. Wenn Du unseren Artikel \u00fcber <a href=\"https:\/\/msgprogramator.sk\/de\/bubble-sort\/\">Bubble Sort<\/a> gelesen hast, wei\u00dft du bereits, dass sein gr\u00f6\u00dftes Manko darin besteht, dass es beim Sortieren von Elementen Szenarien gibt, die sich nicht f\u00fcr den Algorithmus eignen. Zum Beispiel. Kleine Elemente, die sich am Ende des Arrays befinden, sind bei der aufsteigenden Sortierung problematisch und gro\u00dfe Elemente, die sich am Anfang des Arrays befinden, sind bei der absteigenden Sortierung problematisch, weil es ziemlich viele Iterationen braucht, bis ein bestimmtes Element w\u00e4hrend der Sortierung neu positioniert wird. Die Kamm-Sortierung l\u00f6st dieses Problem, indem sie genau solche problematischen Elemente am Anfang der Sortierung ausw\u00e4hlt und sie bevorzugt austauscht.<\/p>\n<h2>Comb sort &#8211; Funktionsprinzip<\/h2>\n<p>Die Grundidee von Comb sort besteht darin, dass kleine Werte am Ende der Liste (sogenannte Schildkr\u00f6ten) schnell eliminiert werden, denn bei der bubble sort wird die Sortierung erheblich verlangsamt, indem eine L\u00fccke (oder ein Grat) verwendet wird, die nach und nach kleiner wird. Gro\u00dfe Werte am Anfang der Liste stellen bei der Sortierung nach Blasen und Stegen kein Problem dar. Wenn zwei beliebige Elemente in der Blasensortierung verglichen werden, haben sie immer einen Abstand von 1. Der Grundgedanke hinter von comb sort ist, dass der Abstand viel gr\u00f6\u00dfer als 1 sein kann und dass er keine feste Konstante sein muss, sondern sich nach Iterationen \u00e4ndern kann. Die L\u00fccke beginnt mit einem gro\u00dfen Wert, der in der Regel der L\u00e4nge des sortierten Arrays entspricht, und verringert sich dann um einen bestimmten Faktor (in der Regel um 1,3). Dieser Vorgang wird so lange wiederholt, bis die L\u00fccke den Wert 1 erreicht. Dann verh\u00e4lt sich der Algorithmus wie eine normale Bubble-Sortierung, aber zu diesem Zeitpunkt ist das Array bereits teilweise geordnet, so dass die letzte Iteration effizienter ist. In Experimenten hat sich gezeigt, dass ein zu kleiner L\u00fcckenwert den Algorithmus verlangsamt, da er unn\u00f6tig viele Vergleiche durchf\u00fchrt, w\u00e4hrend ein zu gro\u00dfer L\u00fcckenwert nicht effizient mit Schildkr\u00f6ten umgehen kann, so dass viele Durchl\u00e4ufe mit einer L\u00fccke von 1 erforderlich sind.<\/p>\n<h2>Vorteile des Comb sort Algorithmus:<\/h2>\n<ul>\n<li>ist leicht zu verstehen und umzusetzen,<\/li>\n<li>ben\u00f6tigt keinen zus\u00e4tzlichen Speicher f\u00fcr die Sortierung,<\/li>\n<li>l\u00f6st das Problem der kleinen Werte am Ende der Liste,<\/li>\n<li>ist im Durchschnitt schneller als Bubble sort.<\/li>\n<\/ul>\n<h2>Der Nachteil des Comb sort Algorithmus:<\/h2>\n<ul>\n<li>Die Zeitkomplexit\u00e4t ist jedoch immer noch O(n\u00b2), was ihn zu einem langsamen Algorithmus f\u00fcr einen gro\u00dfen Datensatz macht,<\/li>\n<li>ist nicht stabil.<\/li>\n<\/ul>\n<h2>Comb sort Zeitbedarf<\/h2>\n<table style=\"height: 96px;\" width=\"496\">\n<thead>\n<tr style=\"height: 24px;\">\n<th style=\"height: 48px; width: 103.537px;\" rowspan=\"2\"><strong>Algorithmus<\/strong><\/th>\n<th style=\"height: 48px; width: 73.1375px;\" rowspan=\"2\"><strong>Methode<\/strong><\/th>\n<th style=\"height: 24px; width: 291.1px;\" colspan=\"3\"><strong>Zeitliche Komplexit\u00e4t<\/strong><\/th>\n<th style=\"height: 48px; width: 72.5625px;\" rowspan=\"2\"><strong>Speicher<\/strong><\/th>\n<th style=\"height: 48px; width: 47.775px;\" rowspan=\"2\"><strong>Stabil<\/strong><\/th>\n<\/tr>\n<tr style=\"height: 24px;\">\n<th style=\"height: 24px; width: 100.838px;\"><strong>schlechteste<\/strong><\/th>\n<th style=\"height: 24px; width: 136.675px;\"><strong>durchschnittlich<\/strong><\/th>\n<th style=\"height: 24px; width: 43.1875px;\"><strong>beste<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"height: 48px;\">\n<td style=\"height: 48px; width: 103.537px;\">Comb sort<\/td>\n<td style=\"height: 48px; width: 73.1375px;\">Austausch<\/td>\n<td style=\"height: 48px; width: 100.838px;\">O(n\u00b2)<\/td>\n<td style=\"height: 48px; width: 136.675px;\">O(n\u00b2)<\/td>\n<td style=\"height: 48px; width: 43.1875px;\">O(n log n)<\/td>\n<td style=\"height: 48px; width: 72.5625px;\">O(1)<\/td>\n<td style=\"height: 48px; width: 47.775px;\">Nein<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Comb sort Animation, Visualisierung, gif<\/h2>\n<p>Eine Visualisierung des Comb-Sort-Algorithmus sieht so aus:<\/p>\n<figure id=\"attachment_3619\" aria-describedby=\"caption-attachment-3619\" style=\"width: 269px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3617 size-full\" src=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/05\/Comb_sort_demo.gif\" alt=\"Comb sort Animation\" width=\"269\" height=\"257\" \/><figcaption id=\"caption-attachment-3619\" class=\"wp-caption-text\">Eine Visualisierung des Comb-Sort-Algorithmus sieht so aus:<\/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 Comb sort Algorithmus findest du zum Beispiel auf dieser <a href=\"https:\/\/tobinatore.github.io\/algovis\/combsort.html\">Seite.<\/a><\/p>\n<h2>Comb sort Implementierung &#8211; Beispiel in Java<\/h2>\n<p>Lass uns diesen Algorithmus mit einer dynamischen L\u00fccke in Java programmieren. <strong><u>CombSort.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package sorting;\n\npublic class CombSort {\n    private boolean change;\n    private int temp;\n    private int gap;\n\n    public void sort(int data[])\n    {\n        change = false;\n        \/\/ gap init\n        gap = data.length;\n        int i = 0;\n        while (gap != 1 || change) {\n            change = false;\n            \/\/ calculate new gap\n            gap \/= 1.33;\n            if(gap &lt;= 1)\n                gap = 1;\n            System.out.println(++i + &quot;. iteration (gap = &quot; + gap + &quot;)&quot;);\n            for (int j = 0; j + gap &lt; data.length; j++) {\n                if (data[j] &gt; data[j + gap]) {\n                    temp = data[j];\n                    data[j] = data[j + gap];\n                    data[j + gap] = 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>&nbsp;<\/p>\n<p><strong><u>Main.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">import sorting.CombSort;\n\npublic class Main {\n    public static void main(String[] args) {\n        int dataToSort[] = { 6, 5, 4, 2, 3, 1, 7 };\n        CombSort combSort = new CombSort();\n        System.out.print(&quot;Input: &quot;);\n        combSort.printArray(dataToSort);\n        combSort.sort(dataToSort);\n        System.out.print(&quot;Sorted: &quot;);\n        combSort.printArray(dataToSort);\n    }\n}<\/code><\/pre>\n<p>Die Ausgabe dieses Beispiels ist: <img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3335 size-full\" src=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/05\/vysledok-prikladu-z-hrebenoveho-triedenia-550-580.webp\" alt=\"Comb sort Beispiel - Kamm-Sortierung von Daten\" width=\"550\" height=\"580\" srcset=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/05\/vysledok-prikladu-z-hrebenoveho-triedenia-550-580.webp 550w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/05\/vysledok-prikladu-z-hrebenoveho-triedenia-550-580-284x300.webp 284w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/> Wir haben die obigen Beispieldateien in Form von Code vorbereitet, den du direkt in Java ausf\u00fchren kannst. <a href=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/05\/CombSort.zip\"><strong>Comb sort<\/strong> Code in Java<\/a> herunterladen. 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 Comb sort ist, sein Prinzip, seine Vorteile und Nachteile sowie ein Beispiel f\u00fcr Java-Code.<\/p>\n","protected":false},"author":14,"featured_media":3340,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[62],"tags":[],"class_list":["post-4701","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\/4701","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=4701"}],"version-history":[{"count":5,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/4701\/revisions"}],"predecessor-version":[{"id":11594,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/4701\/revisions\/11594"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media\/3340"}],"wp:attachment":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media?parent=4701"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/categories?post=4701"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/tags?post=4701"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}