{"id":3181,"date":"2022-06-26T22:58:17","date_gmt":"2022-06-26T19:58:17","guid":{"rendered":"https:\/\/demensdeum.com\/blog\/?p=3181"},"modified":"2024-12-16T22:32:19","modified_gmt":"2024-12-16T19:32:19","slug":"counting-sort","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/de\/2022\/06\/26\/counting-sort\/","title":{"rendered":"Z\u00e4hlsortierung"},"content":{"rendered":"<p>Z\u00e4hlsortierung &#8211; Z\u00e4hlsortieralgorithmus. Bez\u00fcglich? Ja! Einfach so!<\/p>\n<p>Der Algorithmus umfasst mindestens zwei Arrays, das erste &#8211; Liste der zu sortierenden Ganzzahlen, zweite &#8211; ein Array der Gr\u00f6\u00dfe = (maximale Anzahl &#8211; minimale Anzahl) + 1, das zun\u00e4chst nur Nullen enth\u00e4lt. Als n\u00e4chstes werden die Zahlen aus dem ersten Array aussortiert und das Zahlenelement wird verwendet, um einen Index im zweiten Array zu erhalten, der um eins erh\u00f6ht wird. Nachdem wir die gesamte Liste durchgegangen sind, erhalten wir ein vollst\u00e4ndig gef\u00fclltes zweites Array mit der Anzahl der Wiederholungen der Zahlen aus dem ersten. <strong>Der Algorithmus hat einen erheblichen Overhead &#8211; Das zweite Array enth\u00e4lt auch Nullen f\u00fcr Zahlen, die nicht in der ersten Liste enthalten sind, die sogenannten. Overhead aus dem Speicher<\/strong><\/p>\n<p>Nachdem wir das zweite Array erhalten haben, durchlaufen wir es und schreiben die nach Index sortierte Version der Zahl, wobei wir den Z\u00e4hler auf Null dekrementieren. Ein Nullz\u00e4hler wird zun\u00e4chst ignoriert.<\/p>\n<p>Ein Beispiel f\u00fcr den nicht optimierten Betrieb des Z\u00e4hlsortieralgorithmus:<\/p>\n<ol>\n<li>Eingabearray 1,9,1,4,6,4,4<\/li>\n<li>Dann ist das zu z\u00e4hlende Array 0,1,2,3,4,5,6,7,8,9 (Mindestzahl 0, H\u00f6chstzahl 9)<\/li>\n<li>Mit Gesamtz\u00e4hlern 0,2,0,0,3,0,1,0,0,1<\/li>\n<li>Gesamt sortiertes Array 1,1,4,4,4,6,9<\/li>\n<\/ol>\n<p>Algorithmuscode in Python 3:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>\nnumbers = [42, 89, 69, 777, 22, 35, 42, 69, 42, 90, 777]\n\nminimal = min(numbers)\nmaximal = max(numbers)\ncountListRange = maximal - minimal\ncountListRange += 1\ncountList = [0] * countListRange\n\nprint(numbers)\nprint(f\"Minimal number: {minimal}\")\nprint(f\"Maximal number: {maximal}\")\nprint(f\"Count list size: {countListRange}\")\n\nfor number in numbers:\n    index = number - minimal\n    countList[index] += 1\n\nreplacingIndex = 0\nfor index, count in enumerate(countList):\n    for i in range(count):\n        outputNumber = minimal + index\n        numbers[replacingIndex] = outputNumber\n        replacingIndex += 1\n\nprint(numbers)<\/code><\/pre>\n<p>\u0418\u0437-\u0437\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432, \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 <strong>O<\/strong>(<strong>n<\/strong> + <strong>k<\/strong>)<\/p>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438<\/h3>\n<p><a href=\"https:\/\/gitlab.com\/demensdeum\/algorithms\/-\/tree\/master\/sortAlgorithms\/countingSort\" target=\"_blank\" rel=\"noopener\">https:\/\/gitlab.com\/demensdeum\/algorithms\/-\/tree\/master\/sortAlgorithms\/countingSort<\/a><\/p>\n<h3>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=6dk_csyWif0\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=6dk_csyWif0 <\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=OKd534EWcdk\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=OKd534EWcdk <\/a><br \/>\n<a href=\"https:\/\/en.wikipedia.org\/wiki\/Counting_sort\" target=\"_blank\" rel=\"noopener\">https:\/\/en.wikipedia.org\/wiki\/Counting_sort<\/a><br \/>\n<a href=\"https:\/\/rosettacode.org\/wiki\/Sorting_algorithms\/Counting_sort\" target=\"_blank\" rel=\"noopener\">https:\/\/rosettacode.org\/wiki\/Sorting_algorithms\/Counting_sort<\/a><br \/>\n<a href=\"https:\/\/pro-prof.com\/forums\/topic\/%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC-%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8-%D0%BF%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82%D0%BE%D0%BC\" target=\"_blank\" rel=\"noopener\">https:\/\/pro-prof.com\/forums\/topic\/%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC-%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8-%D0%BF%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82%D0%BE%D0%BC<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Z\u00e4hlsortierung &#8211; Z\u00e4hlsortieralgorithmus. Bez\u00fcglich? Ja! Einfach so! Der Algorithmus umfasst mindestens zwei Arrays, das erste &#8211; Liste der zu sortierenden Ganzzahlen, zweite &#8211; ein Array der Gr\u00f6\u00dfe = (maximale Anzahl &#8211; minimale Anzahl) + 1, das zun\u00e4chst nur Nullen enth\u00e4lt. Als n\u00e4chstes werden die Zahlen aus dem ersten Array aussortiert und das Zahlenelement wird verwendet,<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/de\/2022\/06\/26\/counting-sort\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Z\u00e4hlsortierung&#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,191,190],"class_list":["post-3181","post","type-post","status-publish","format-standard","hentry","category-techie","category-tutorials","tag-algorithms","tag-counting-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\/3181","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=3181"}],"version-history":[{"count":21,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/3181\/revisions"}],"predecessor-version":[{"id":3879,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/3181\/revisions\/3879"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/media?parent=3181"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/categories?post=3181"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/tags?post=3181"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}