https://en.wikipedia.org/w/index.php?action=history&feed=atom&title=Category%3AString_sorting_algorithms Category:String sorting algorithms - Revision history 2025-06-01T02:46:01Z Revision history for this page on the wiki MediaWiki 1.45.0-wmf.3 https://en.wikipedia.org/w/index.php?title=Category:String_sorting_algorithms&diff=1211312815&oldid=prev DB1729: Reverted 2 edits by Annekathrinhermann (talk): Misplaced content. This is a category page, not an article. 2024-03-01T22:32:44Z <p>Reverted 2 edits by <a href="/wiki/Special:Contributions/Annekathrinhermann" title="Special:Contributions/Annekathrinhermann">Annekathrinhermann</a> (<a href="/wiki/User_talk:Annekathrinhermann" title="User talk:Annekathrinhermann">talk</a>): Misplaced content. This is a <a href="/wiki/Help:Category" title="Help:Category">category page</a>, not an article.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 22:32, 1 March 2024</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 1:</td> <td colspan="2" class="diff-lineno">Line 1:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Category:Algorithms on strings|Sorting]]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Category:Algorithms on strings|Sorting]]</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Category:Sorting algorithms]]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Category:Sorting algorithms]]</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><br /></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>In [[computer science]], [[string]] [[sorting algorithms]] are a special case of [[sorting]] [[algorithms]]. The input is an [[array]] &lt;math&gt;S = [ s0,...,sn-1]&lt;/math&gt; of &lt;math&gt;n&lt;/math&gt; strings with characters from an alphabet {{math|Σ}} in which the elements are then placed in the correct order.</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>[[File:String Sorting.png|thumb|An example for sorting strings]]</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><br /></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Unlike traditional sorting algorithms that deal with atomic keys, string sorting encounters unique challenges. Sorting strings using conventional atomic sorting algorithms, which treat keys as indivisible objects, is inefficient because comparing entire strings can be costly and must be performed numerous times. Efficient string sorting algorithms, in contrast, inspect most characters of the input only once during the entire sorting process and they examine only those characters that are necessary to establish the correct ordering. Another challenge is that strings are represented as arrays of [[pointers]]. This representation results in indirect access to string characters, leading to [[cache]] faults during the access, even when scanning an array of strings. This is in contrast to sorting atomic keys, where scanning is notably cache efficient. The [[efficiency]] of string sorting algorithms depens upon multiple factors, including the size of the dataset (&lt;math&gt;n&lt;/math&gt;), the distinguishing prefix size of &lt;math&gt;S&lt;/math&gt; (&lt;math&gt;D&lt;/math&gt;), which is the minimal number of characters that need to be examined to sort the strings, the number of subproblems ({{math|σ}}), into which the algorithm breaks down the problem, and the underlying hardware. This indicates that no singular algorithm is universally optimal.</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><br /></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><br /></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>== Sequential Methods ==</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><br /></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>=== Multikey Quicksort ===</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>[[File:Mulitkey Quicksort.png|thumb|An example for Mulitkey Quicksort for sorting strings]]</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Developed by Bentley and Sedgewick &lt;ref&gt;BENTLEY, Jon L.; SEDGEWICK, Robert. Fast algorithms for sorting and searching strings. In: Proceedings of the eighth annual ACM-SIAM symposium on Discrete algorithms. 1997. S. 360-369.&lt;/ref&gt;, this algorithm is an adaptation of the traditional [[Quicksort]], tailored for string sorting. It uses the character &lt;math&gt;x = s[h]&lt;/math&gt; with a common prefix of length h as a splitter, organizing the strings into three distinct arrays based on their &lt;math&gt;(h+1)-th&lt;/math&gt; character's relation to &lt;math&gt;x: &lt;,&gt;,=&lt;/math&gt;. The algorithm recurses until the termination condition is met: if &lt;math&gt;x=0&lt;/math&gt; termination with &lt;math&gt;S_=&lt;/math&gt;. With Insertion Sort as a base case sorter for constant input sizes, multikey quicksort has a complexity of {{math|O(D + n log n)}}.</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><br /></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>=== Most Significant Digit (MSD) Radix Sort ===</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>[[File:MSD-Radix Sort.png|thumb|An example for MSD-Radix Sort for sorting strings]]</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Most Significant Digit (MSD) Radix Sort is especially efficient for sorting large datasets, particularly when the alphabet size is small &lt;ref&gt;KÄRKKÄINEN, Juha; RANTALA, Tommi. Engineering radix sort for strings. In: International Symposium on String Processing and Information Retrieval. Berlin, Heidelberg: Springer Berlin Heidelberg, 2008. S. 3-14.&lt;/ref&gt;. The algorithm initiates sorting by examining the {{math|(h+1)-th}} character of each string with &lt;math&gt;h&lt;/math&gt; as the common prefix, subsequently dividing the dataset into {{math|σ}} distinct subproblems. Each subproblem is then recursively sorted with the common prefix length &lt;math&gt;h + 1&lt;/math&gt;. This strategy, which is a natural approach to string sorting, has been subject to numerous refinements and improvements across various studies in the literature &lt;ref&gt;KÄRKKÄINEN, Juha; RANTALA, Tommi. Engineering radix sort for strings. In: International Symposium on String Processing and Information Retrieval. Berlin, Heidelberg: Springer Berlin Heidelberg, 2008. S. 3-14.&lt;/ref&gt; &lt;ref&gt;NG, Waihong; KAKEHI, Katsuhiko. Cache efficient radix sort for string sorting. IEICE transactions on fundamentals of electronics, communications and computer sciences, 2007, 90. Jg., Nr. 2, S. 457-466.&lt;/ref&gt; &lt;ref&gt;ANDERSSON, Arne; NILSSON, Stefan. Implementing radixsort. Journal of Experimental Algorithmics (JEA), 1998, 3. Jg., S. 7-es.&lt;/ref&gt;. The [[time complexity]] is {{math|O(D)}} plus the time required for sorting the base cases. For example, with multikey quicksort as the base case sorter MSD Radix Sort has a complexity of {{math|O(D + n log σ)}}.</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><br /></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>=== Burstsort ===</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>[[File:Burstsort.png|thumb|]] </div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Burstsort &lt;ref&gt;SINHA, Ranjan; ZOBEL, Justin. Efficient trie-based sorting of large sets of strings. In: ACSC. 2003. S. 11-18.&lt;/ref&gt; uses a [[trie]]&lt;ref&gt;HEINZ, Steffen; ZOBEL, Justin; WILLIAMS, Hugh E. Burst tries: a fast, efficient data structure for string keys. ACM Transactions on Information Systems (TOIS), 2002, 20. Jg., Nr. 2, S. 192-223.&lt;/ref&gt;-based structure with containers at the leaves for sorting the strings. Upon reaching a predefined threshold, these containers "burst", redistributing the strings into new containers based on their next character. These new containers are then attached to the appropriate child nodes of the trie. The sorting process involves traversing the trie and individually sorting the small containers. Key factors influencing the runtime efficiency of Burstsort include the trie implementation, the design of the containers, the burst threshold, and the chosen base algorithm for sorting the containers. Sinha and Zoble &lt;ref&gt;SINHA, Ranjan; ZOBEL, Justin. Cache-conscious sorting of large sets of strings with dynamic tries. Journal of Experimental Algorithmics (JEA), 2004, 9. Jg., S. 1.5-es.&lt;/ref&gt; used an array for each trie node and unordered dynamic arrays of string pointers for the leaf containers, with a bursting threshold set at {{math|8192}}. With this configuration and Multikey Quicksort for sorting the leaves Burstsort has a complexity of {{math|O(D + n log σ)}}.</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><br /></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>=== LCP-Mergesort ===</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><br /></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>LCP-Mergesort is an adaptation of the traditional [[Mergesort]] algorithm, which stores and reuses the longest common prefixes (LCPs) of consecutive strings in the sorted subproblems &lt;ref&gt;NG, Waihong; KAKEHI, Katsuhiko. Merging string sequences by longest common prefixes. IPSJ Digital Courier, 2008, 4. Jg., S. 69-78.&lt;/ref&gt;. This strategy enhances the efficiency of string comparisons. In the conventional method the strings &lt;math&gt;s_a&lt;/math&gt; and &lt;math&gt;s_b&lt;/math&gt; must be compared character-by-character. However, with the LCP information for &lt;math&gt;s_a&lt;/math&gt; and &lt;math&gt;s_b&lt;/math&gt; relative to another string &lt;math&gt;p&lt;/math&gt; of similar or smaller size allows the preliminary use of the LCP. If the LCP between &lt;math&gt;p&lt;/math&gt; and &lt;math&gt;s_a&lt;/math&gt; is shorter than that between &lt;math&gt;p&lt;/math&gt; and &lt;math&gt;s_b&lt;/math&gt;, it follows that &lt;math&gt;s_a&lt;/math&gt; precedes &lt;math&gt;s_b&lt;/math&gt; in lexicographical order due to &lt;math&gt;s_a&lt;/math&gt; and &lt;math&gt;p&lt;/math&gt; sharing a shorter common prefix than &lt;math&gt;s_b&lt;/math&gt; and &lt;math&gt;p&lt;/math&gt;. This also applies symmetrically. LCP-Mergesort has a worst-case time complexity of &lt;math&gt;O(D + n log n)&lt;/math&gt;.</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><br /></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>=== Insertion Sort ===</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>[[Insertion Sort]] &lt;ref&gt;MCCLELLAN, Michael T.; MINKER, Jack. The art of computer programming, vol. 3: sorting and searching. 1974.&lt;/ref&gt; is frequently used as the base case sorter for small sets of strings. The algorithm stores an ordered array and inserts the unsorted items into their appropriate positions through linear scanning. This method treats strings as atomic units, necessitating full string comparisons during the linear scan to ensure the correct order. It has a worst-case time complexity of &lt;math&gt;O(nD)&lt;/math&gt;. So it is particularly good for small &lt;math&gt;n&lt;/math&gt; and &lt;math&gt;D&lt;/math&gt;, due to the cache-efficient manner in which strings are scanned.</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><br /></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>== Parallel Methods ==</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The exploration of [[parallel]] string sorting algorithms remains limited, yet it is the only way to get performance out of [[Moore's Law]] &lt;ref&gt;MOORE, Gordon E. Cramming more components onto integrated circuits. Proceedings of the IEEE, 1998, 86. Jg., Nr. 1, S. 82-85.&lt;/ref&gt;. The scalability of an algorithm in a parallel computing environment depends on various factors, similar to those affecting sequential methods. Many of the algorithms discussed in the sequential context can be adapted for parallel execution.</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><br /></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>== References ==</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> </table> DB1729 https://en.wikipedia.org/w/index.php?title=Category:String_sorting_algorithms&diff=1211291483&oldid=prev Annekathrinhermann at 20:30, 1 March 2024 2024-03-01T20:30:04Z <p></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 20:30, 1 March 2024</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 1:</td> <td colspan="2" class="diff-lineno">Line 1:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Category:Algorithms on strings|Sorting]]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Category:Algorithms on strings|Sorting]]</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Category:Sorting algorithms]]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Category:Sorting algorithms]]</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><br /></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>In [[computer science]], [[string]] [[sorting algorithms]] are a special case of [[sorting]] [[algorithms]]. The input is an [[array]] &lt;math&gt;S = [ s0,...,sn-1]&lt;/math&gt; of &lt;math&gt;n&lt;/math&gt; strings with characters from an alphabet {{math|Σ}} in which the elements are then placed in the correct order.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>In [[computer science]], [[string]] [[sorting algorithms]] are a special case of [[sorting]] [[algorithms]]. The input is an [[array]] &lt;math&gt;S = [ s0,...,sn-1]&lt;/math&gt; of &lt;math&gt;n&lt;/math&gt; strings with characters from an alphabet {{math|Σ}} in which the elements are then placed in the correct order.</div></td> </tr> </table> Annekathrinhermann https://en.wikipedia.org/w/index.php?title=Category:String_sorting_algorithms&diff=1211291373&oldid=prev Annekathrinhermann at 20:29, 1 March 2024 2024-03-01T20:29:18Z <p></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 20:29, 1 March 2024</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 1:</td> <td colspan="2" class="diff-lineno">Line 1:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Category:Algorithms on strings|Sorting]]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Category:Algorithms on strings|Sorting]]</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Category:Sorting algorithms]]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Category:Sorting algorithms]]</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>In [[computer science]], [[string]] [[sorting algorithms]] are a special case of [[sorting]] [[algorithms]]. The input is an [[array]] &lt;math&gt;S = [ s0,...,sn-1]&lt;/math&gt; of &lt;math&gt;n&lt;/math&gt; strings with characters from an alphabet {{math|Σ}} in which the elements are then placed in the correct order.</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>[[File:String Sorting.png|thumb|An example for sorting strings]]</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Unlike traditional sorting algorithms that deal with atomic keys, string sorting encounters unique challenges. Sorting strings using conventional atomic sorting algorithms, which treat keys as indivisible objects, is inefficient because comparing entire strings can be costly and must be performed numerous times. Efficient string sorting algorithms, in contrast, inspect most characters of the input only once during the entire sorting process and they examine only those characters that are necessary to establish the correct ordering. Another challenge is that strings are represented as arrays of [[pointers]]. This representation results in indirect access to string characters, leading to [[cache]] faults during the access, even when scanning an array of strings. This is in contrast to sorting atomic keys, where scanning is notably cache efficient. The [[efficiency]] of string sorting algorithms depens upon multiple factors, including the size of the dataset (&lt;math&gt;n&lt;/math&gt;), the distinguishing prefix size of &lt;math&gt;S&lt;/math&gt; (&lt;math&gt;D&lt;/math&gt;), which is the minimal number of characters that need to be examined to sort the strings, the number of subproblems ({{math|σ}}), into which the algorithm breaks down the problem, and the underlying hardware. This indicates that no singular algorithm is universally optimal.</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>== Sequential Methods ==</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>=== Multikey Quicksort ===</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>[[File:Mulitkey Quicksort.png|thumb|An example for Mulitkey Quicksort for sorting strings]]</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Developed by Bentley and Sedgewick &lt;ref&gt;BENTLEY, Jon L.; SEDGEWICK, Robert. Fast algorithms for sorting and searching strings. In: Proceedings of the eighth annual ACM-SIAM symposium on Discrete algorithms. 1997. S. 360-369.&lt;/ref&gt;, this algorithm is an adaptation of the traditional [[Quicksort]], tailored for string sorting. It uses the character &lt;math&gt;x = s[h]&lt;/math&gt; with a common prefix of length h as a splitter, organizing the strings into three distinct arrays based on their &lt;math&gt;(h+1)-th&lt;/math&gt; character's relation to &lt;math&gt;x: &lt;,&gt;,=&lt;/math&gt;. The algorithm recurses until the termination condition is met: if &lt;math&gt;x=0&lt;/math&gt; termination with &lt;math&gt;S_=&lt;/math&gt;. With Insertion Sort as a base case sorter for constant input sizes, multikey quicksort has a complexity of {{math|O(D + n log n)}}.</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>=== Most Significant Digit (MSD) Radix Sort ===</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>[[File:MSD-Radix Sort.png|thumb|An example for MSD-Radix Sort for sorting strings]]</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Most Significant Digit (MSD) Radix Sort is especially efficient for sorting large datasets, particularly when the alphabet size is small &lt;ref&gt;KÄRKKÄINEN, Juha; RANTALA, Tommi. Engineering radix sort for strings. In: International Symposium on String Processing and Information Retrieval. Berlin, Heidelberg: Springer Berlin Heidelberg, 2008. S. 3-14.&lt;/ref&gt;. The algorithm initiates sorting by examining the {{math|(h+1)-th}} character of each string with &lt;math&gt;h&lt;/math&gt; as the common prefix, subsequently dividing the dataset into {{math|σ}} distinct subproblems. Each subproblem is then recursively sorted with the common prefix length &lt;math&gt;h + 1&lt;/math&gt;. This strategy, which is a natural approach to string sorting, has been subject to numerous refinements and improvements across various studies in the literature &lt;ref&gt;KÄRKKÄINEN, Juha; RANTALA, Tommi. Engineering radix sort for strings. In: International Symposium on String Processing and Information Retrieval. Berlin, Heidelberg: Springer Berlin Heidelberg, 2008. S. 3-14.&lt;/ref&gt; &lt;ref&gt;NG, Waihong; KAKEHI, Katsuhiko. Cache efficient radix sort for string sorting. IEICE transactions on fundamentals of electronics, communications and computer sciences, 2007, 90. Jg., Nr. 2, S. 457-466.&lt;/ref&gt; &lt;ref&gt;ANDERSSON, Arne; NILSSON, Stefan. Implementing radixsort. Journal of Experimental Algorithmics (JEA), 1998, 3. Jg., S. 7-es.&lt;/ref&gt;. The [[time complexity]] is {{math|O(D)}} plus the time required for sorting the base cases. For example, with multikey quicksort as the base case sorter MSD Radix Sort has a complexity of {{math|O(D + n log σ)}}.</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>=== Burstsort ===</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>[[File:Burstsort.png|thumb|]] </div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Burstsort &lt;ref&gt;SINHA, Ranjan; ZOBEL, Justin. Efficient trie-based sorting of large sets of strings. In: ACSC. 2003. S. 11-18.&lt;/ref&gt; uses a [[trie]]&lt;ref&gt;HEINZ, Steffen; ZOBEL, Justin; WILLIAMS, Hugh E. Burst tries: a fast, efficient data structure for string keys. ACM Transactions on Information Systems (TOIS), 2002, 20. Jg., Nr. 2, S. 192-223.&lt;/ref&gt;-based structure with containers at the leaves for sorting the strings. Upon reaching a predefined threshold, these containers "burst", redistributing the strings into new containers based on their next character. These new containers are then attached to the appropriate child nodes of the trie. The sorting process involves traversing the trie and individually sorting the small containers. Key factors influencing the runtime efficiency of Burstsort include the trie implementation, the design of the containers, the burst threshold, and the chosen base algorithm for sorting the containers. Sinha and Zoble &lt;ref&gt;SINHA, Ranjan; ZOBEL, Justin. Cache-conscious sorting of large sets of strings with dynamic tries. Journal of Experimental Algorithmics (JEA), 2004, 9. Jg., S. 1.5-es.&lt;/ref&gt; used an array for each trie node and unordered dynamic arrays of string pointers for the leaf containers, with a bursting threshold set at {{math|8192}}. With this configuration and Multikey Quicksort for sorting the leaves Burstsort has a complexity of {{math|O(D + n log σ)}}.</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>=== LCP-Mergesort ===</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>LCP-Mergesort is an adaptation of the traditional [[Mergesort]] algorithm, which stores and reuses the longest common prefixes (LCPs) of consecutive strings in the sorted subproblems &lt;ref&gt;NG, Waihong; KAKEHI, Katsuhiko. Merging string sequences by longest common prefixes. IPSJ Digital Courier, 2008, 4. Jg., S. 69-78.&lt;/ref&gt;. This strategy enhances the efficiency of string comparisons. In the conventional method the strings &lt;math&gt;s_a&lt;/math&gt; and &lt;math&gt;s_b&lt;/math&gt; must be compared character-by-character. However, with the LCP information for &lt;math&gt;s_a&lt;/math&gt; and &lt;math&gt;s_b&lt;/math&gt; relative to another string &lt;math&gt;p&lt;/math&gt; of similar or smaller size allows the preliminary use of the LCP. If the LCP between &lt;math&gt;p&lt;/math&gt; and &lt;math&gt;s_a&lt;/math&gt; is shorter than that between &lt;math&gt;p&lt;/math&gt; and &lt;math&gt;s_b&lt;/math&gt;, it follows that &lt;math&gt;s_a&lt;/math&gt; precedes &lt;math&gt;s_b&lt;/math&gt; in lexicographical order due to &lt;math&gt;s_a&lt;/math&gt; and &lt;math&gt;p&lt;/math&gt; sharing a shorter common prefix than &lt;math&gt;s_b&lt;/math&gt; and &lt;math&gt;p&lt;/math&gt;. This also applies symmetrically. LCP-Mergesort has a worst-case time complexity of &lt;math&gt;O(D + n log n)&lt;/math&gt;.</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>=== Insertion Sort ===</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>[[Insertion Sort]] &lt;ref&gt;MCCLELLAN, Michael T.; MINKER, Jack. The art of computer programming, vol. 3: sorting and searching. 1974.&lt;/ref&gt; is frequently used as the base case sorter for small sets of strings. The algorithm stores an ordered array and inserts the unsorted items into their appropriate positions through linear scanning. This method treats strings as atomic units, necessitating full string comparisons during the linear scan to ensure the correct order. It has a worst-case time complexity of &lt;math&gt;O(nD)&lt;/math&gt;. So it is particularly good for small &lt;math&gt;n&lt;/math&gt; and &lt;math&gt;D&lt;/math&gt;, due to the cache-efficient manner in which strings are scanned.</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>== Parallel Methods ==</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The exploration of [[parallel]] string sorting algorithms remains limited, yet it is the only way to get performance out of [[Moore's Law]] &lt;ref&gt;MOORE, Gordon E. Cramming more components onto integrated circuits. Proceedings of the IEEE, 1998, 86. Jg., Nr. 1, S. 82-85.&lt;/ref&gt;. The scalability of an algorithm in a parallel computing environment depends on various factors, similar to those affecting sequential methods. Many of the algorithms discussed in the sequential context can be adapted for parallel execution.</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>== References ==</div></td> </tr> </table> Annekathrinhermann https://en.wikipedia.org/w/index.php?title=Category:String_sorting_algorithms&diff=690444905&oldid=prev Qwertyus: ←Created page with 'Sorting Category:Sorting algorithms' 2015-11-13T11:34:28Z <p><a href="/wiki/Wikipedia:AES" class="mw-redirect" title="Wikipedia:AES">←</a>Created page with &#039;<a href="/wiki/Category:Algorithms_on_strings" title="Category:Algorithms on strings">Sorting</a> <a href="/wiki/Category:Sorting_algorithms" title="Category:Sorting algorithms">Category:Sorting algorithms</a>&#039;</p> <p><b>New page</b></p><div>[[Category:Algorithms on strings|Sorting]]<br /> [[Category:Sorting algorithms]]</div> Qwertyus