{"id":2457,"date":"2019-12-30T10:29:17","date_gmt":"2019-12-30T07:29:17","guid":{"rendered":"http:\/\/demensdeum.com\/blog\/?p=2457"},"modified":"2024-12-16T22:32:31","modified_gmt":"2024-12-16T19:32:31","slug":"insertion-sort-merge-sort","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/de\/2019\/12\/30\/insertion-sort-merge-sort\/","title":{"rendered":"Einf\u00fcgungssortierung, Zusammenf\u00fchrungssortierung"},"content":{"rendered":"<h3>Einf\u00fcgungssortierung<\/h3>\n<p>Einf\u00fcgesortierung &#8211; Jedes <strong>Element<\/strong> wird mit den <strong>vorherigen<\/strong> Elementen in der Liste verglichen und das <strong>Element<\/strong> wird mit dem gr\u00f6\u00dferen ausgetauscht, falls vorhanden, andernfalls die innere Vergleichsschleife stoppt. Da die Elemente vom ersten bis zum letzten sortiert werden, wird jedes Element mit einer bereits sortierten Liste verglichen, was *m\u00f6glicherweise* die Gesamtlaufzeit verk\u00fcrzt. Die zeitliche Komplexit\u00e4t des Algorithmus betr\u00e4gt O(n^2), also identisch mit der Blasenvariante.<\/p>\n<h3>Sortierung zusammenf\u00fchren<\/h3>\n<p>Sortierung zusammenf\u00fchren &#8211; Die Liste wird in Gruppen eines Elements unterteilt. Anschlie\u00dfend werden die Gruppen paarweise \u201ezusammengef\u00fchrt\u201c und gleichzeitig verglichen. In meiner Implementierung werden beim Zusammenf\u00fchren von Paaren die Elemente auf der linken Seite mit den Elementen auf der rechten Seite verglichen und dann in die resultierende Liste verschoben. Wenn die Elemente auf der linken Seite nicht mehr vorhanden sind, werden alle Elemente auf der rechten Seite zur Ergebnisliste hinzugef\u00fcgt Liste (ihr zus\u00e4tzlicher Vergleich ist unn\u00f6tig, da alle Elemente in den Gruppen Sortieriterationen durchlaufen)< br \/>Die Arbeit dieses Algorithmus l\u00e4sst sich sehr einfach parallelisieren; die Phase der Zusammenf\u00fchrung von Paaren kann in Threads durchgef\u00fchrt werden, wobei auf das Ende der Iterationen im Dispatcher gewartet wird.<br \/>Ausgabe des Algorithmus f\u00fcr Single-Threaded-Ausf\u00fchrung:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>[\"John\", \"Alice\", \"Mike\", \"#1\", \"\u0410\u0440\u0442\u0435\u043c\", \"20\", \"60\", \"60\", \"DoubleTrouble\"]\n[[\"John\"], [\"Alice\"], [\"Mike\"], [\"#1\"], [\"\u0410\u0440\u0442\u0435\u043c\"], [\"20\"], [\"60\"], [\"60\"], [\"DoubleTrouble\"]]\n[[\"Alice\", \"John\"], [\"#1\", \"Mike\"], [\"20\", \"\u0410\u0440\u0442\u0435\u043c\"], [\"60\", \"60\"], [\"DoubleTrouble\"]]\n[[\"#1\", \"Alice\", \"John\", \"Mike\"], [\"20\", \"60\", \"60\", \"\u0410\u0440\u0442\u0435\u043c\"], [\"DoubleTrouble\"]]\n[[\"#1\", \"20\", \"60\", \"60\", \"Alice\", \"John\", \"Mike\", \"\u0410\u0440\u0442\u0435\u043c\"], [\"DoubleTrouble\"]]\n[\"#1\", \"20\", \"60\", \"60\", \"Alice\", \"DoubleTrouble\", \"John\", \"Mike\", \"\u0410\u0440\u0442\u0435\u043c\"]\n\n<\/code><\/pre>\n<\/div>\n<p>Ausgabe des Algorithmus f\u00fcr die Multithread-Ausf\u00fchrung:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>[\"John\", \"Alice\", \"Mike\", \"#1\", \"\u0410\u0440\u0442\u0435\u043c\", \"20\", \"60\", \"60\", \"DoubleTrouble\"]\n[[\"John\"], [\"Alice\"], [\"Mike\"], [\"#1\"], [\"\u0410\u0440\u0442\u0435\u043c\"], [\"20\"], [\"60\"], [\"60\"], [\"DoubleTrouble\"]]\n[[\"20\", \"\u0410\u0440\u0442\u0435\u043c\"], [\"Alice\", \"John\"], [\"60\", \"60\"], [\"#1\", \"Mike\"], [\"DoubleTrouble\"]]\n[[\"#1\", \"60\", \"60\", \"Mike\"], [\"20\", \"Alice\", \"John\", \"\u0410\u0440\u0442\u0435\u043c\"], [\"DoubleTrouble\"]]\n[[\"DoubleTrouble\"], [\"#1\", \"20\", \"60\", \"60\", \"Alice\", \"John\", \"Mike\", \"\u0410\u0440\u0442\u0435\u043c\"]]\n[\"#1\", \"20\", \"60\", \"60\", \"Alice\", \"DoubleTrouble\", \"John\", \"Mike\", \"\u0410\u0440\u0442\u0435\u043c\"]\n\n<\/code><\/pre>\n<\/div>\n<p>Die zeitliche Komplexit\u00e4t des Algorithmus betr\u00e4gt O(n*log(n)), was etwas besser ist als O(n^2)<\/p>\n<h3>Quellen<\/h3>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Insertion_sort\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/en.wikipedia.org\/wiki\/Insertion_sort<\/a ><br \/><a href=\"https:\/\/en.wikipedia.org\/wiki\/Merge_sort\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/en.wikipedia.org\/wiki\/Merge_sort<\/a><\/p>\n<h3>Quellcode<\/h3>\n<p><a href=\"https:\/\/gitlab.com\/demensdeum\/algorithms\/-\/tree\/master\/sortAlgorithms\/insertionSort\" target=\"_blank\" rel=\"noopener\">https:\/\/gitlab.com\/demensdeum \/algorithms\/-\/tree\/master\/sortAlgorithms\/insertionSort<\/a><br \/><a href=\"https:\/\/gitlab.com\/demensdeum\/algorithms\/-\/tree\/master\/sortAlgorithms\/mergeSort\" target=\"_blank\" rel=\"noopener\">https:\/\/gitlab.com\/demensdeum\/algorithms\/-\/tree\/master\/sortAlgorithms\/mergeSort<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Einf\u00fcgungssortierung Einf\u00fcgesortierung &#8211; Jedes Element wird mit den vorherigen Elementen in der Liste verglichen und das Element wird mit dem gr\u00f6\u00dferen ausgetauscht, falls vorhanden, andernfalls die innere Vergleichsschleife stoppt. Da die Elemente vom ersten bis zum letzten sortiert werden, wird jedes Element mit einer bereits sortierten Liste verglichen, was *m\u00f6glicherweise* die Gesamtlaufzeit verk\u00fcrzt. Die zeitliche<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/de\/2019\/12\/30\/insertion-sort-merge-sort\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Einf\u00fcgungssortierung, Zusammenf\u00fchrungssortierung&#8221;<\/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_memberships_contains_paid_content":false,"footnotes":""},"categories":[61,52],"tags":[131,138,139,190],"class_list":["post-2457","post","type-post","status-publish","format-standard","hentry","category-techie","category-tutorials","tag-algorithms","tag-insertion-sort","tag-merge-sort","tag-sorting","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"de","enabled_languages":["en","ru","zh","de","fr","ja","pt"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"ru":{"title":true,"content":true,"excerpt":false},"zh":{"title":true,"content":true,"excerpt":false},"de":{"title":true,"content":true,"excerpt":false},"fr":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false}}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2457","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/comments?post=2457"}],"version-history":[{"count":19,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2457\/revisions"}],"predecessor-version":[{"id":3927,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2457\/revisions\/3927"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/media?parent=2457"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/categories?post=2457"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/tags?post=2457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}