{"id":55000308,"date":"2016-02-01T00:00:00","date_gmt":"2020-01-24T15:59:32","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=308"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Bubble_Sort","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Bubble_Sort.html","title":{"rendered":"Bubble Sort"},"content":{"rendered":"<p class='introduction'>Solange Sie mit Datenzugriffsobjekten hantieren, ist das Sortieren von Daten eine einfache Angelegenheit. Diese &uuml;bernehmen Sortierungen etwa &uuml;ber die SQL-Anweisung <b>OrderBy<\/b> oder dezidierte Sort-Methoden. Bei in Arrays untergebrachten Datenmengen unter VBA l&auml;sst Sie Access jedoch im Regen stehen. Hier kommen Sie um eigens programmierte Routinen nicht herum. <\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1601_Klassenmodule.accdb<\/b> im VBA-Modul <b>mdlSort<\/b>.<\/p>\n<h2>Abstract<\/h2>\n<p>Hin und wieder kommt es vor, dass Sie Daten nicht nur &uuml;ber <b>Recordsets<\/b> verwalten m&uuml;ssen, sondern auch &uuml;ber <b>Arrays<\/b>. Ein Beispiel w&auml;re das Einlesen externer Textdateien, die tabellarischen Aufbau aufwiesen. In der Regel &ouml;ffnen Sie solche Dateien &uuml;ber die <b>Open<\/b>-Anweisung und speichern ihren Inhalt in eine String-Variable. Die <b>Split-Methode <\/b>erm&ouml;glicht anschlie&szlig;end das Auftrennen der Zeilen in die Elemente eines String-Arrays. M&ouml;chten Sie diese Elemente nun nach einem bestimmten Kriterium sortieren, so ist eine Sortierroutine gefragt.<\/p>\n<p>Es existiert ein Unmenge von Sortieralgorithmen mit Namen, wie <b>QuickSort<\/b>, <b>HeapSort<\/b>, <b>MergeSort<\/b>, <b>ShellSort<\/b> oder <b>InsertionSort<\/b>, die in der Regel zwar meist mit nur wenigen Zeilen Programmcode auskommen, jedoch h&auml;ufig in ihrer Funktionalit&auml;t nur schwer zu durchschauen sind. Anders beim <b>BubbleSort<\/b>-Algorithmus, der zwar in Hinsicht auf Performance der mit Abstand ineffizienteste ist, daf&uuml;r jedoch umso leichter zu verstehen. Sollten Sie nicht Hunderttausende Elemente sortieren wollen, so spielt die Performance auf heutigen Rechnern in diesem Fall keine Rolle mehr.<\/p>\n<h2>BubbleSort<\/h2>\n<p>Die Sache ist recht simpel: Sie haben etwa ein eindimensionales Array mit allerlei Zeichenfolgen vor sich, die in aufsteigende Reihenfolge gebracht werden sollen. Dazu vergleicht BubbleSort jedes Element mit jedem und entscheidet, welches gr&ouml;&szlig;er oder kleiner ist. Trifft dies zu, so vertauscht es die beiden, andernfalls nicht. Ein Beispiel-Listing sagt hier mehr, als viele Worte.<\/p>\n<p>Listing 1 stellt die Routine <b>SortArray<\/b> vor, wie Sie sie im Modul <b>mdlSort<\/b> der Beispieldatenbank vorfinden. Sie &uuml;bergeben der Prozedur ein Array mit Elementen, die keinesfalls nur vom Typ <b>String<\/b> sein m&uuml;ssen. Das Ganze funktioniert auch mit Zahlenwerten beliebiger Art, oder auch mit Datumswerten, da als Parameter <b>MyArray<\/b> ein Variant angegeben ist.<\/p>\n<pre><span style=\"color:blue;\">Public <\/span>Enum eSortArray\r\n     eSortAscending = 1\r\n     eSortDescending = -1\r\nEnd Enum\r\n<span style=\"color:blue;\">Sub <\/span>SortArray(MyArray<span style=\"color:blue;\"> As Variant<\/span>, <span style=\"color:blue;\">Optional<\/span> Order<span style=\"color:blue;\"> As <\/span>eSortArray = eSortAscending)\r\n     <span style=\"color:blue;\">If <\/span>IsEmpty(MyArray)<span style=\"color:blue;\"> Then<\/span> <span style=\"color:blue;\">Exit Sub<\/span>\r\n     \r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Long<\/span>, j<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>n<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>tmp<span style=\"color:blue;\"> As Variant<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>ret<span style=\"color:blue;\"> As Boolean<\/span>\r\n     \r\n     n = <span style=\"color:blue;\">UBound<\/span>(MyArray)\r\n     For i = 0 To n - 1\r\n         For j = i + 1 To n\r\n             <span style=\"color:blue;\">If <\/span>Order = eSortAscending<span style=\"color:blue;\"> Then<\/span>\r\n                 ret = (MyArray(i) < MyArray(j))\r\n             <span style=\"color:blue;\">Else<\/span>\r\n                 ret = (MyArray(i) > MyArray(j))\r\n             <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">If <\/span>ret = 0<span style=\"color:blue;\"> Then<\/span>\r\n                 tmp = MyArray(i)\r\n                 MyArray(i) = MyArray(j)\r\n                 MyArray(j) = tmp\r\n             <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">Next<\/span> j\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 1: Implementation des Bubble-Sort-Algorithmus in der Prozedur SortArray<\/p>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Access &#091;basics&#093;<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/282\/access-basics?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 400 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000308\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/index.php\/data\/wp\/v2\/posts\/55000308?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000308\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"8d63f6cbe9\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Solange Sie mit Datenzugriffsobjekten hantieren, ist das Sortieren von Daten eine einfache Angelegenheit. Diese &uuml;bernehmen Sortierungen etwa &uuml;ber die SQL-Anweisung <b>OrderBy<\/b> oder dezidierte Sort-Methoden. Bei in Arrays untergebrachten Datenmengen unter VBA l&auml;sst Sie Access jedoch im Regen stehen. Hier kommen Sie um eigens programmierte Routinen nicht herum. <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66012016,662016,44000011],"tags":[],"class_list":["post-55000308","post","type-post","status-publish","format-standard","hentry","category-66012016","category-662016","category-VBAGrundlagen"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Bubble Sort - Access [basics]<\/title>\n<meta name=\"description\" content=\"Solange Sie mit Datenzugriffsobjekten hantieren, ist das Sortieren von Daten eine einfache Angelegenheit. Diese \u00fcbernehmen Sortierungen etwa \u00fcber die SQL-Anweisung OrderBy oder dezidierte Sort-Methoden. Bei in Arrays untergebrachten Datenmengen unter VBA l\u00e4sst Sie Access jedoch im Regen stehen. Hier kommen Sie um eigens programmierte Routinen nicht herum.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Bubble_Sort.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bubble Sort - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Solange Sie mit Datenzugriffsobjekten hantieren, ist das Sortieren von Daten eine einfache Angelegenheit. Diese \u00fcbernehmen Sortierungen etwa \u00fcber die SQL-Anweisung OrderBy oder dezidierte Sort-Methoden. Bei in Arrays untergebrachten Datenmengen unter VBA l\u00e4sst Sie Access jedoch im Regen stehen. Hier kommen Sie um eigens programmierte Routinen nicht herum.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Bubble_Sort.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T15:59:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"5\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Bubble_Sort.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Bubble_Sort.html\",\"name\":\"Bubble Sort - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"datePublished\":\"2020-01-24T15:59:32+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Solange Sie mit Datenzugriffsobjekten hantieren, ist das Sortieren von Daten eine einfache Angelegenheit. Diese \\u00fcbernehmen Sortierungen etwa \\u00fcber die SQL-Anweisung OrderBy oder dezidierte Sort-Methoden. Bei in Arrays untergebrachten Datenmengen unter VBA l\\u00e4sst Sie Access jedoch im Regen stehen. Hier kommen Sie um eigens programmierte Routinen nicht herum.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Bubble_Sort.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Bubble_Sort.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Bubble_Sort.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Bubble_Sort.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Bubble_Sort.html\",\"name\":\"Bubble Sort\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000308","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000308"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000308\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}