\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{Priyal kumar (pryl)} \pdfinfo{ /Title (sorting-algorithms.pdf) /Creator (Cheatography) /Author (Priyal kumar (pryl)) /Subject (Sorting algorithms Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{CCC622} \definecolor{LightBackground}{HTML}{FBFBF1} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{Sorting algorithms Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{Priyal kumar (pryl)} via \textcolor{DarkBackground}{\uline{cheatography.com/66402/cs/16808/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}Priyal kumar (pryl) \\ \uline{cheatography.com/pryl} \\ \uline{\seqsplit{9pryl}.tiddlyhost.com/\#door:door} \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Published 27th August, 2018.\\ Updated 27th August, 2018.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{2} \begin{tabularx}{8.4cm}{x{4.16 cm} x{3.84 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{Sorting algorithms and Methods}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{ {\emph{Sorting algorithms}} }} & {\emph{ {\bf{Methods}} }} \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} Bubble sort & Exchanging \tn % Row Count 3 (+ 1) % Row 2 \SetRowColor{LightBackground} Heapsort & Selection \tn % Row Count 4 (+ 1) % Row 3 \SetRowColor{white} Insertion sort & Insertion \tn % Row Count 5 (+ 1) % Row 4 \SetRowColor{LightBackground} Introsort & Partitioning \& Selection \tn % Row Count 7 (+ 2) % Row 5 \SetRowColor{white} Merge sort & Merging \tn % Row Count 8 (+ 1) % Row 6 \SetRowColor{LightBackground} Patience sorting & Insertion \& Selection \tn % Row Count 10 (+ 2) % Row 7 \SetRowColor{white} Quicksort & Partitioning \tn % Row Count 11 (+ 1) % Row 8 \SetRowColor{LightBackground} Selection sort & Selection \tn % Row Count 12 (+ 1) % Row 9 \SetRowColor{white} Timsort & Insertion \& Merging \tn % Row Count 13 (+ 1) % Row 10 \SetRowColor{LightBackground} Unshuffle sort & Distribution and Merge \tn % Row Count 15 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{3.192 cm} x{2.128 cm} x{2.28 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{8.4cm}}{\bf\textcolor{white}{Best and Worst Case}} \tn % Row 0 \SetRowColor{LightBackground} {\emph{ {\bf{Algorithms}} }} & {\bf{ {\emph{Best Case}} }} & {\bf{ {\emph{Worst Case}} }} \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} Bogosort & n & ∞ \tn % Row Count 3 (+ 1) % Row 2 \SetRowColor{LightBackground} Bubble sort & n & n\textasciicircum{}2\textasciicircum{} \tn % Row Count 4 (+ 1) % Row 3 \SetRowColor{white} Bucket sort (uniform keys) & - & n\textasciicircum{}2\textasciicircum{}k \tn % Row Count 6 (+ 2) % Row 4 \SetRowColor{LightBackground} Heap sort & n log n & n log n \tn % Row Count 7 (+ 1) % Row 5 \SetRowColor{white} Insertion sort & n & n\textasciicircum{}2\textasciicircum{} \tn % Row Count 8 (+ 1) % Row 6 \SetRowColor{LightBackground} Merge sort & n log n & n log n \tn % Row Count 9 (+ 1) % Row 7 \SetRowColor{white} Quick sort & n log n & n\textasciicircum{}2\textasciicircum{} \tn % Row Count 10 (+ 1) % Row 8 \SetRowColor{LightBackground} Selection sort & n\textasciicircum{}2\textasciicircum{} & n\textasciicircum{}2\textasciicircum{} \tn % Row Count 11 (+ 1) % Row 9 \SetRowColor{white} Shell sort & n log n & n\textasciicircum{}4/3\textasciicircum{} \tn % Row Count 12 (+ 1) % Row 10 \SetRowColor{LightBackground} Spreadsort & n & n(k/s+d) \tn % Row Count 13 (+ 1) % Row 11 \SetRowColor{white} Timsort & n & n log n \tn % Row Count 14 (+ 1) % Row 12 \SetRowColor{LightBackground} Unshuffle sort & n & kn \tn % Row Count 15 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}---} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Insertion sort}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{function insertionSortR(array A, int n) \newline if n\textgreater{}0 \newline insertionSortR(A,n-1) \newline x ← A{[}n{]} \newline j ← n-1 \newline while j \textgreater{}= 0 and A{[}j{]} \textgreater{} x \newline A{[}j+1{]} ← A{[}j{]} \newline j ← j-1 \newline end while \newline A{[}j+1{]} ← x \newline end if \newline end function} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Merge sort}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{function merge\_sort(list m) \newline // Base case. A list of zero or one elements is sorted, by definition. \newline if length of m ≤ 1 then \newline return m \newline \newline // Recursive case. First, divide the list into equal-sized sublists \newline // consisting of the first half and second half of the list. \newline // This assumes lists start at index 0. \newline var left := empty list \newline var right := empty list \newline for each x with index i in m do \newline if i \textless{} (length of m)/2 then \newline add x to left \newline else \newline add x to right \newline \newline // Recursively sort both sublists. \newline left := merge\_sort(left) \newline right := merge\_sort(right) \newline \newline // Then merge the now-sorted sublists. \newline return merge(left, right)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Bogosort}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{while not isInOrder(deck): \newline shuffle(deck)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Bucket sort}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{function bucketSort(array, n) is \newline buckets ← new array of n empty lists \newline for i = 0 to (length(array)-1) do \newline insert array{[}i{]} into buckets{[}msbits(array{[}i{]}, k){]} \newline for i = 0 to n - 1 do \newline nextSort(buckets{[}i{]}); \newline return the concatenation of buckets{[}0{]}, ...., buckets{[}n-1{]}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Resources}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{\seqsplit{https://en.wikipedia.org/wiki/Sorting\_algorithm\#Comparison\_of\_algorithms}} \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{\seqsplit{http://bigocheatsheet.com}} \tn % Row Count 3 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{2.66 cm} x{2.356 cm} x{2.584 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{8.4cm}}{\bf\textcolor{white}{Sorting algorithm complexities}} \tn % Row 0 \SetRowColor{LightBackground} {\emph{ {\bf{Algorithms}} }} & {\bf{ {\emph{Average Case}} }} & {\bf{ {\emph{Memory complexity}} }} \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} Bitonic sorter & log\textasciicircum{}2\textasciicircum{} n & n log\textasciicircum{}2\textasciicircum{} n \tn % Row Count 3 (+ 1) % Row 2 \SetRowColor{LightBackground} Bogosort & n × n! & 1 \tn % Row Count 4 (+ 1) % Row 3 \SetRowColor{white} Bubble sort & n\textasciicircum{}2\textasciicircum{} & 1 \tn % Row Count 5 (+ 1) % Row 4 \SetRowColor{LightBackground} Bucket sort (uniform keys) & n+k & nk \tn % Row Count 7 (+ 2) % Row 5 \SetRowColor{white} Burstsort & n(k/d) & n(k/d) \tn % Row Count 8 (+ 1) % Row 6 \SetRowColor{LightBackground} Counting sort & n+r & n+r \tn % Row Count 9 (+ 1) % Row 7 \SetRowColor{white} Heap sort & n log n & 1 \tn % Row Count 10 (+ 1) % Row 8 \SetRowColor{LightBackground} Insertion sort & n\textasciicircum{}2\textasciicircum{} & 1 \tn % Row Count 11 (+ 1) % Row 9 \SetRowColor{white} Introsort & n log n & log n \tn % Row Count 12 (+ 1) % Row 10 \SetRowColor{LightBackground} LSD Radix Sort & n(k/d) & n+2\textasciicircum{}d\textasciicircum{} \tn % Row Count 13 (+ 1) % Row 11 \SetRowColor{white} Merge sort & n log n & n \tn % Row Count 14 (+ 1) % Row 12 \SetRowColor{LightBackground} MSD Radix Sort (in-place) & n(k/d) & 2\textasciicircum{}d\textasciicircum{} \tn % Row Count 16 (+ 2) % Row 13 \SetRowColor{white} Patience sort & - & n \tn % Row Count 17 (+ 1) % Row 14 \SetRowColor{LightBackground} Pigeonhole sort & n+2\textasciicircum{}k\textasciicircum{} & 2\textasciicircum{}k\textasciicircum{} \tn % Row Count 19 (+ 2) % Row 15 \SetRowColor{white} Quicksort & n log n & log n \tn % Row Count 20 (+ 1) % Row 16 \SetRowColor{LightBackground} Selection sort & n\textasciicircum{}2\textasciicircum{} & 1 \tn % Row Count 21 (+ 1) % Row 17 \SetRowColor{white} Shell sort & Depends on gap sequence & 1 \tn % Row Count 23 (+ 2) % Row 18 \SetRowColor{LightBackground} Spaghetti sort & n & n\textasciicircum{}2\textasciicircum{} \tn % Row Count 24 (+ 1) % Row 19 \SetRowColor{white} Spreadsort & n(k/d) & (k/d)2\textasciicircum{}d\textasciicircum{} \tn % Row Count 25 (+ 1) % Row 20 \SetRowColor{LightBackground} Stooge sort & n\textasciicircum{}(log 3/log1.5)\textasciicircum{} & n \tn % Row Count 27 (+ 2) % Row 21 \SetRowColor{white} Timsort & n log n & n \tn % Row Count 28 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}---} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Bubble sort}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{procedure bubbleSort( A : list of sortable items ) \newline n = length(A) \newline repeat \newline swapped = false \newline for i = 1 to n-1 inclusive do \newline if A{[}i-1{]} \textgreater{} A{[}i{]} then \newline swap(A{[}i-1{]}, A{[}i{]}) \newline swapped = true \newline end if \newline end for \newline n = n - 1 \newline until not swapped \newline end procedure} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Quicksort}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{algorithm quicksort(A, lo, hi) is \newline if lo \textless{} hi then \newline p := partition(A, lo, hi) \newline quicksort(A, lo, p - 1 ) \newline quicksort(A, p + 1, hi) \newline \newline algorithm partition(A, lo, hi) is \newline pivot := A{[}hi{]} \newline i := lo \newline for j := lo to hi - 1 do \newline if A{[}j{]} \textless{} pivot then \newline swap A{[}i{]} with A{[}j{]} \newline i := i + 1 \newline swap A{[}i{]} with A{[}hi{]} \newline return i} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Selection sort}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{procedure selection sort \newline list : array of items \newline n : size of list \newline \newline for i = 1 to n - 1 \newline /{\emph{ set current element as minimum}}/ \newline min = i \newline \newline /{\emph{ check the element to be minimum }}/ \newline \newline for j = i+1 to n \newline if list{[}j{]} \textless{} list{[}min{]} then \newline min = j; \newline end if \newline end for \newline \newline /{\emph{ swap the minimum element with the current element}}/ \newline if indexMin != i then \newline swap list{[}min{]} and list{[}i{]} \newline end if \newline end for \newline \newline end procedure} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}