{"id":55000351,"date":"2017-04-01T00:00:00","date_gmt":"2017-04-01T00:00:00","guid":{"rendered":"http:\/\/access-basics.de\/351"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Sortieralgorithmen","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Sortieralgorithmen.html","title":{"rendered":"Sortieralgorithmen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/57d70afebe214db7a3f5f7a5f59a473c\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p class='introduction'>In Datenbanken muss man sich &uuml;ber die Sortierung von Datens&auml;tzen gemeinhin keine Gedanken machen. Die Engines enthalten alles Ben&ouml;tigte, um Daten in Abfragen oder auch Recordsets &uuml;ber einfache SQL-Statements sortiert auszugeben. Doch hin und wieder steht man vor der Aufgabe, auch Daten in Arrays zu sortieren, etwa, um sie einem Treeview oder einem Listenfeld zu verabreichen. &Uuml;ber die m&ouml;glichen Algorithmen erfahren Sie hier mehr.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1702_Sorting.zip<\/b>.<\/p>\n<h2>Sortieren per VBA<\/h2>\n<p>Einen kleinen Vorgeschmack lieferte bereits der Beitrag zu <b>BubbleSort<\/b> der Doppelausgabe 01\/2016. Dieser Algorithmus ist ziemlich simpel und durchschaubar. Er hat aber seine Grenzen erreicht, sobald es um die Performance geht. Bei umfangreichen Datenbest&auml;nden ist er extrem langsam. Hier sind Alternativen gefragt.<\/p>\n<p>Eigentlich kommt es ziemlich selten vor, dass Daten per VBA sortiert werden m&uuml;ssen. Sie liegen ja in der Regel in Tabellen vor, und die lassen sich &uuml;ber Abfragen sortieren. Manchmal jedoch kommen sie aus externen Quellen, wie etwa Textdateien. Nat&uuml;rlich k&ouml;nnte man diese in Tabellen importieren, dann einer Sortierabfrage unterziehen und das Ergebnis, so ben&ouml;tigt, wieder im VBA-Projekt &uuml;ber ein Recordset auslesen. Eleganter ist es aber, diesem Umweg zu vermeiden und die Daten direkt per VBA zu sortieren. Legen Sie sich dazu einfach ein Modul mit generellen Sortieralgorithmen an, wie in der Beispieldatenbank geschehen, das Sie sp&auml;ter gegebenenfalls in ihre Zieldatenbank kopieren k&ouml;nnen.<\/p>\n<h2>Ausgangslage: String-Array<\/h2>\n<p>Der h&auml;ufigste Fall ist sicher das Sortieren von Texten eines String-Arrays. Um diesen Anwendungsfall mit den im Folgenden vorgestellten Algorithmen zu testen, wird ein gef&uuml;lltes String-Array mit einer nicht zu geringen Anzahl von Eintr&auml;gen ben&ouml;tigt. Wir holen sie einfach aus einer vorliegenden Kundentabelle. Die Hilfsfunktion <b>CreateStringArray<\/b> (siehe Listing 1) stellt es zur Verf&uuml;gung.<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>CreateStringArray(<span style=\"color:blue;\">Optional<\/span> Limit<span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As String<\/span>()\r\n     <span style=\"color:blue;\">Dim <\/span>rs<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>S<span style=\"color:blue;\"> As String<\/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>arrRet()<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> rs = CurrentDb.OpenRecordset(\"SELECT Nachname, Vorname\" & _\r\n         \"FROM tblKunden ORDER By ID\", dbOpenDynaset)\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rs.EOF\r\n         If (<span style=\"color:blue;\">Len<\/span>(rs!Nachname.Value) > 2) And _\r\n            (<span style=\"color:blue;\">Len<\/span>(rs!Vorname.Value) > 2) Then\r\n             S = rs!Nachname.Value & \", \" & rs!Vorname.Value\r\n             ReDim Preserve arrRet(n)\r\n             arrRet(n) = S\r\n             n = n + 1\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">If <\/span>Limit <> 0 Then If n > Limit<span style=\"color:blue;\"> Then<\/span> <span style=\"color:blue;\">Exit Do<\/span>\r\n         rs.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     rs.Close\r\n     CreateStringArray = arrRet\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p class='imagetext'>Listing 1: &Uuml;ber diese Funktion werden die Daten einer Kundentabelle in ein String-Array &uuml;berf&uuml;hrt<\/p>\n<p>Hier werden die Felder <b>Nachname<\/b> und <b>Vorname<\/b> der Tabelle <b>tblKunden<\/b> in ein Recordset aufgenommen, das nach der <b>ID<\/b> der Datens&auml;tze sortiert ist. Die Namen selbst sind damit unsortiert. Eine Schleife durchl&auml;uft alle Datens&auml;tze und ber&uuml;cksichtigt nur jene, in der die Namen mindestens drei Buchstaben enthalten. In der Variablen <b>S<\/b> werden dann <b>Nachname<\/b> und <b>Vorname<\/b>, durch Komma getrennt, aneinandergef&uuml;gt. Dieses Ergebnis wird jeweils einem Element des Arrays <b>arrRet<\/b> zugewiesen, dessen Dimension sich st&auml;ndig &uuml;ber die Z&auml;hlvariable <b>n<\/b> erweitert, wobei die <b>ReDim<\/b>-Anweisung den Inhalt nicht zerst&ouml;rt, weil sie eine <b>Preserve<\/b>-Klausel enth&auml;lt. Optional k&ouml;nnen Sie der Prozedur per Parameter ein <b>Limit<\/b> &uuml;bergeben, welches die Anzahl der Elemente des Ergebnis-Arrays begrenzt. Ohne Limit kommt es zu etwa 9.000 Elementen.<\/p>\n<p>Sie rufen diese Funktion etwa so auf:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>arr()<span style=\"color:blue;\"> As String<\/span>\r\narr = CreateStringArray()\r\n... (Sortieren von arr() ) ...<\/pre>\n<p>Hier handelt es sich um ein eindimensionales Array. Nachname und Vorname stehen nicht in getrennten Feldern. Letzteres w&uuml;rde ein zweidimensionales Array erfordern und damit auch kompliziertere Sortieralgorithmen. Der Trick des Verkettens von Nach- und Vorname &uuml;ber ein Trennzeichen sortiert aber automatisch korrekt nach beiden Feldern, soweit zuf&auml;llig nicht in einem Nachnamen ein Komma enthalten ist. Nun kann es an das Sortieren des Test-Arrays gehen.<\/p>\n<h2>Wizhook<\/h2>\n<p>Access-VBA h&auml;lt an sich keine Funktion vor, um eine solches Array zu sortieren. Tats&auml;chlich existiert jedoch eine Methode eines versteckten Klassenobjekts, die das erm&ouml;glicht. Blenden Sie im Objektkatalog per Kontextmen&uuml; die <b>Verborgenen Elemente<\/b> ein, so finden Sie die Klasse <b>Wizhook<\/b> in ihm, bei der es sich um eine Sammlung von Funktionen zu verschiedensten Aspekten handelt. Sie m&uuml;ssen kein Objekt dieser Klasse neu erzeugen, da Access sie von sich aus instanziiert. Der Beweis im VBA-Direktfenster:<\/p>\n<pre>  Wizhook Is Nothing\r\n-> Falsch<\/pre>\n<p>Eine Methode der Klasse lautet <b>SortStringArray<\/b> mit dieser Definition:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>SortStringArray(Array()<span style=\"color:blue;\"> As String<\/span>)<\/pre>\n<p>Zu &uuml;bergeben ist ihr also ein String-Array, das allerdings eindimensional sein muss. Sie sortiert das Array auch wunschgem&auml;&szlig;. Das aber erst, nachdem die Klasse freigegeben wurde! Denn ohne einen geheimen Schl&uuml;ssel funktionieren keine der Funktionen des <b>Wizhook<\/b>-Objekts. Sie schalten sie erst &uuml;ber das Setzen der <b>Key<\/b>-Eigenschaft frei. Wozu Microsoft das implementiert hat, ist ein R&auml;tsel, denn dieser Zahlenschl&uuml;ssel ist nat&uuml;rlich keineswegs geheim:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>SortWizHook(sarr()<span style=\"color:blue;\"> As String<\/span>)\r\n     WizHook.Key = 51488399\r\n     WizHook.SortStringArray sarr\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Methoden dieser Klasse wurden &uuml;brigens mit jeder neuen Access-Version erweitert. Sie sind nicht dokumentiert, und auch einige Seiten im Netz konnten nur einen Teil der Funktionen analysieren.<\/p>\n<p>Der Key wird hier bei jedem Aufruf der Funktion <b>SortWizHook<\/b> gesetzt. Das ist allerdings nicht wirklich notwendig. Einmal gesetzt bleibt die Klasse f&uuml;r die gesamte VBA-Sitzung freigeschaltet. Die korrekte Funktion k&ouml;nnen Sie nun etwa so testen:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>arr()<span style=\"color:blue;\"> As String<\/span>\r\n<span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Long<\/span>\r\narr = CreateStringArray()\r\nSortWizHook arr\r\nFor i = 0 To Ubound(arr)\r\n     <span style=\"color:blue;\">Debug.Print<\/span> arr(i)\r\n<span style=\"color:blue;\">Next<\/span> i<\/pre>\n<p>Im VBA-Direktfenster listen sich nun alle Namen des Arrays alphanumerisch aufsteigend auf. Der <b>Wizhook<\/b>-Methode kann nicht angegeben werden, ob auf- oder  absteigend sortiert werden soll. Das hat sie auch mit den meisten der folgenden Algorithmen gemein. W&auml;re eine absteigende Sortierung gew&uuml;nscht, so m&uuml;sste diese anschlie&szlig;end &uuml;ber ein erneutes Umsortierung mit einer Hilfsfunktion erreicht werden:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>SortReverse (arr()<span style=\"color:blue;\"> As String<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>arrRet()<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>n<span style=\"color:blue;\"> As Long<\/span>, i<span style=\"color:blue;\"> As Long<\/span>\r\n     \r\n     n= <span style=\"color:blue;\">UBound<\/span>(arr)\r\n     Redim arrRet(n)\r\n     For i = 0 To n\r\n         arrRet(i) = arr(n-i)\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das tut der Performance keinen Abbruch und verl&auml;uft ziemlich schnell.<\/p>\n<h2>BubbleSort<\/h2>\n<p>Der Vollst&auml;ndigkeit halber bilden wir den <b>BubbleSort<\/b>-Algorithmus nochmals in Listing 2 ab. Jedes Element des Arrays <b>sarr<\/b> wird ausnahmslos mit jedem verglichen. Ist das eine gr&ouml;&szlig;er, als das andere, so kommt es zum Vertauschen der beiden &uuml;ber die tempor&auml;re Variable <b>S<\/b>. Eine absteigende Sortierung erhalten Sie hier durch &Auml;nderung der Vergleichszeile:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>BubbleSortStrings(sarr()<span style=\"color:blue;\"> As String<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>S<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Long<\/span>, j<span style=\"color:blue;\"> As Long<\/span>, n<span style=\"color:blue;\"> As Long<\/span>\r\n     \r\n     n = <span style=\"color:blue;\">UBound<\/span>(sarr)\r\n     For i = 0 To n - 1\r\n         For j = i + 1 To n\r\n             <span style=\"color:blue;\">If <\/span>sarr(i) > sarr(j)<span style=\"color:blue;\"> Then<\/span>\r\n                 S = sarr(i)\r\n                 sarr(i) = sarr(j)\r\n                 sarr(j) = S\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 2: Funktion zum Sortieren &uuml;ber BubbleSort<\/p>\n<pre><span style=\"color:blue;\">If <\/span>sarr(i) < sarr(j)<span style=\"color:blue;\"> Then<\/span><\/pre>\n<p>Bei den 9.000 Elementen des Beispiel-Arrays kommt es hier zu &uuml;ber 40 Millionen Iterationen. Das beansprucht auch auf einem aktuellen Rechner ziemlich viel Rechenzeit. Wir haben bei uns 13 Sekunden gemessen &#8211; ein v&ouml;llig inakzeptabler Wert! Die <b>Wizhook<\/b>-Methode erreichte dasselbe Ergebnis in nur 0,03 Sekunden!<\/p>\n<p>Sehen wir, ob sich dieser Wert durch andere Methoden noch unterbieten l&auml;sst.<\/p>\n<h2>QuickSort<\/h2>\n<p>Dieser Algorithmus ist zweifellos der verbreitetste &uuml;berhaupt. Es ist davon auszugehen, dass auch die <b>Wizhook<\/b>-Methode, wie auch die <b>Database Engine<\/b>, ihn intern verwenden. Seine Effizienz ist kaum zu &uuml;berbieten. Der Witz an ihm ist der Umstand, dass er ausgerechnet dann am schnellsten ist, wenn die Daten m&ouml;glichst unsortiert daher kommen. Sind die Daten bereits weitgehend vorsortiert, dann ist er recht langsam!<\/p>\n<p>Der Algorithmus in Listing 3 arbeitet <b>rekursiv<\/b>. Das hei&szlig;t, dass sich die Funktion fortw&auml;hrend selbst aufruft, wie an den letzten beiden Zeilen zu erkennen ist. Die jeweiligen Elementzeiger stehen in den Variablen <b>LR<\/b> und <b>LL<\/b>, stellvertretend f&uuml;r <b>Rechter Zeiger<\/b> und <b>Linker Zeiger<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>QuickSortStrings(sarr()<span style=\"color:blue;\"> As String<\/span>, <span style=\"color:blue;\">Optional<\/span> ByVal LL<span style=\"color:blue;\"> As Long<\/span>, <span style=\"color:blue;\">Optional<\/span> ByVal LR<span style=\"color:blue;\"> As Long<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>n1<span style=\"color:blue;\"> As Long<\/span>, n2<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>sTmp<span style=\"color:blue;\"> As String<\/span>, sSwap<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">If <\/span>LR = 0<span style=\"color:blue;\"> Then<\/span>   LL = <span style=\"color:blue;\">LBound<\/span>(sarr): LR = <span style=\"color:blue;\">UBound<\/span>(sarr)\r\n     n1 = LL: n2 = LR\r\n     sTmp = sarr((LL + LR) \\ 2)\r\n     Do\r\n         <span style=\"color:blue;\">Do While<\/span> (sarr(n1) < sTmp) And (n1 < LR)\r\n             n1 = n1 + 1\r\n         <span style=\"color:blue;\">Loop<\/span>\r\n         <span style=\"color:blue;\">Do While<\/span> (sTmp < sarr(n2)) And (n2 > LL)\r\n             n2 = n2 - 1\r\n         <span style=\"color:blue;\">Loop<\/span>\r\n         <span style=\"color:blue;\">If <\/span>n1 <= n2<span style=\"color:blue;\"> Then<\/span>\r\n             sSwap = sarr(n1)\r\n             sarr(n1) = sarr(n2)\r\n             sarr(n2) = sSwap\r\n             n1 = n1 + 1\r\n             n2 = n2 - 1\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span> Until n1 > n2\r\n     <span style=\"color:blue;\">If <\/span>LL < n2<span style=\"color:blue;\"> Then<\/span> QuickSortStrings sarr, LL, n2\r\n     <span style=\"color:blue;\">If <\/span>n1 < LR<span style=\"color:blue;\"> Then<\/span> QuickSortStrings sarr, n1, LR\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 3: Funktion zum Sortieren &uuml;ber Quicksort<\/p>\n<p>Das Prinzip besteht darin, dass die Daten zunehmend h&auml;lftig in Bl&ouml;cke unterteilt und dann jeweils nur die Elemente eines Blocks untersucht werden. Und die Bl&ouml;cke werden immer kleiner, bis sie nur noch aus zwei Elementen bestehen. Das schr&auml;nkt die Anzahl der Vergleiche stark ein.<\/p>\n<p>Sie &uuml;bergeben der Funktion nur das Array und lassen die beiden optionalen Parameter unber&uuml;cksichtigt:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>arr()<span style=\"color:blue;\"> As String<\/span>\r\narr = CreateStringArray()\r\nQuickSortStrings arr<\/pre>\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\/55000351\/\">\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\/55000351?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\/55000351\/\"\/>\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>In Datenbanken muss man sich &uuml;ber die Sortierung von Datens&auml;tzen gemeinhin keine Gedanken machen. Die Engines enthalten alles Ben&ouml;tigte, um Daten in Abfragen oder auch Recordsets &uuml;ber einfache SQL-Statements sortiert auszugeben. Doch hin und wieder steht man vor der Aufgabe, auch Daten in Arrays zu sortieren, etwa, um sie einem Treeview oder einem Listenfeld zu verabreichen. &Uuml;ber die m&ouml;glichen Algorithmen erfahren Sie hier mehr.<\/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":[66022017,662017,44000011],"tags":[],"class_list":["post-55000351","post","type-post","status-publish","format-standard","hentry","category-66022017","category-662017","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>Sortieralgorithmen - Access [basics]<\/title>\n<meta name=\"description\" content=\"In Datenbanken muss man sich \u00fcber die Sortierung von Datens\u00e4tzen gemeinhin keine Gedanken machen. Die Engines enthalten alles Ben\u00f6tigte, um Daten in Abfragen oder auch Recordsets \u00fcber einfache SQL-Statements sortiert auszugeben. Doch hin und wieder steht man vor der Aufgabe, auch Daten in Arrays zu sortieren, etwa, um sie einem Treeview oder einem Listenfeld zu verabreichen. \u00dcber die m\u00f6glichen Algorithmen erfahren Sie hier mehr.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Sortieralgorithmen.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sortieralgorithmen - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"In Datenbanken muss man sich \u00fcber die Sortierung von Datens\u00e4tzen gemeinhin keine Gedanken machen. Die Engines enthalten alles Ben\u00f6tigte, um Daten in Abfragen oder auch Recordsets \u00fcber einfache SQL-Statements sortiert auszugeben. Doch hin und wieder steht man vor der Aufgabe, auch Daten in Arrays zu sortieren, etwa, um sie einem Treeview oder einem Listenfeld zu verabreichen. \u00dcber die m\u00f6glichen Algorithmen erfahren Sie hier mehr.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Sortieralgorithmen.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-01T00:00:00+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=\"22\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\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Sortieralgorithmen.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"http:\/\/vg08.met.vgwort.de\/na\/57d70afebe214db7a3f5f7a5f59a473c\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Sortieralgorithmen.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Sortieralgorithmen.html\",\"name\":\"Sortieralgorithmen - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Sortieralgorithmen.html#primaryimage\"},\"datePublished\":\"2017-04-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"In Datenbanken muss man sich \\u00fcber die Sortierung von Datens\\u00e4tzen gemeinhin keine Gedanken machen. Die Engines enthalten alles Ben\\u00f6tigte, um Daten in Abfragen oder auch Recordsets \\u00fcber einfache SQL-Statements sortiert auszugeben. Doch hin und wieder steht man vor der Aufgabe, auch Daten in Arrays zu sortieren, etwa, um sie einem Treeview oder einem Listenfeld zu verabreichen. \\u00dcber die m\\u00f6glichen Algorithmen erfahren Sie hier mehr.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Sortieralgorithmen.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Sortieralgorithmen.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Sortieralgorithmen.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\/Sortieralgorithmen.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Sortieralgorithmen.html\",\"name\":\"Sortieralgorithmen\"}}]},{\"@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\/55000351","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=55000351"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000351\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000351"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000351"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}