mirror of
https://github.com/TheAlgorithms/C-Plus-Plus.git
synced 2026-03-21 04:18:34 +08:00
1419 lines
109 KiB
HTML
1419 lines
109 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
|
<meta name="generator" content="Doxygen 1.12.0"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>Algorithms_in_C++: sorting Namespace Reference</title>
|
|
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="../../jquery.js"></script>
|
|
<script type="text/javascript" src="../../dynsections.js"></script>
|
|
<script type="text/javascript" src="../../clipboard.js"></script>
|
|
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="../../navtreedata.js"></script>
|
|
<script type="text/javascript" src="../../navtree.js"></script>
|
|
<script type="text/javascript" src="../../resize.js"></script>
|
|
<script type="text/javascript" src="../../cookie.js"></script>
|
|
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="../../search/searchdata.js"></script>
|
|
<script type="text/javascript" src="../../search/search.js"></script>
|
|
<script type="text/x-mathjax-config">
|
|
MathJax.Hub.Config({
|
|
extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
|
|
jax: ["input/TeX","output/HTML-CSS"],
|
|
});
|
|
</script>
|
|
<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-MML-AM_CHTML/MathJax.js"></script>
|
|
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
|
|
</head>
|
|
<body>
|
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
<div id="titlearea">
|
|
<table cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr id="projectrow">
|
|
<td id="projectalign">
|
|
<div id="projectname">Algorithms_in_C++<span id="projectnumber"> 1.0.0</span>
|
|
</div>
|
|
<div id="projectbrief">Set of algorithms implemented in C++.</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.12.0 -->
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
|
|
/* @license-end */
|
|
</script>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(function() { codefold.init(1); });
|
|
/* @license-end */
|
|
</script>
|
|
<script type="text/javascript" src="../../menudata.js"></script>
|
|
<script type="text/javascript" src="../../menu.js"></script>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(function() {
|
|
initMenu('../../',true,false,'search.php','Search',true);
|
|
$(function() { init_search(); });
|
|
});
|
|
/* @license-end */
|
|
</script>
|
|
<div id="main-nav"></div>
|
|
</div><!-- top -->
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
<div id="nav-tree">
|
|
<div id="nav-tree-contents">
|
|
<div id="nav-sync" class="sync"></div>
|
|
</div>
|
|
</div>
|
|
<div id="splitbar" style="-moz-user-select:none;"
|
|
class="ui-resizable-handle">
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(function(){initNavTree('d5/d91/namespacesorting.html','../../'); initResizable(true); });
|
|
/* @license-end */
|
|
</script>
|
|
<div id="doc-content">
|
|
<!-- window showing the filter options -->
|
|
<div id="MSearchSelectWindow"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
</div>
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
<div id="MSearchResultsWindow">
|
|
<div id="MSearchResults">
|
|
<div class="SRPage">
|
|
<div id="SRIndex">
|
|
<div id="SRResults"></div>
|
|
<div class="SRStatus" id="Loading">Loading...</div>
|
|
<div class="SRStatus" id="Searching">Searching...</div>
|
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="header">
|
|
<div class="summary">
|
|
<a href="#func-members">Functions</a> </div>
|
|
<div class="headertitle"><div class="title">sorting Namespace Reference<div class="ingroups"><a class="el" href="../../d5/d4c/group__sorting.html">Sorting Algorithm</a></div></div></div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
|
|
<p>for working with vectors
|
|
<a href="#details">More...</a></p>
|
|
<table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
|
|
Functions</h2></td></tr>
|
|
<tr class="memitem:a034d8b276518a902962e87d3158b64fd" id="r_a034d8b276518a902962e87d3158b64fd"><td class="memTemplParams" colspan="2">template<class T > </td></tr>
|
|
<tr class="memitem:a034d8b276518a902962e87d3158b64fd"><td class="memTemplItemLeft" align="right" valign="top">int64_t </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a034d8b276518a902962e87d3158b64fd">binary_search</a> (<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< T > &arr, T val, int64_t low, int64_t high)</td></tr>
|
|
<tr class="memdesc:a034d8b276518a902962e87d3158b64fd"><td class="mdescLeft"> </td><td class="mdescRight">Binary search function to find the most suitable pace for an element. <br /></td></tr>
|
|
<tr class="separator:a034d8b276518a902962e87d3158b64fd"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a5f4bc75cca6dd8294af2d0e328006c68" id="r_a5f4bc75cca6dd8294af2d0e328006c68"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
|
<tr class="memitem:a5f4bc75cca6dd8294af2d0e328006c68"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a5f4bc75cca6dd8294af2d0e328006c68">insertionSort_binsrch</a> (<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< T > &arr)</td></tr>
|
|
<tr class="memdesc:a5f4bc75cca6dd8294af2d0e328006c68"><td class="mdescLeft"> </td><td class="mdescRight">Insertion sort function to sort the vector. <br /></td></tr>
|
|
<tr class="separator:a5f4bc75cca6dd8294af2d0e328006c68"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a7bfe11bd4703eacd1dab93f25ec639c5" id="r_a7bfe11bd4703eacd1dab93f25ec639c5"><td class="memTemplParams" colspan="2">template<typename T , size_t N> </td></tr>
|
|
<tr class="memitem:a7bfe11bd4703eacd1dab93f25ec639c5"><td class="memTemplItemLeft" align="right" valign="top"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a>< T, N > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a7bfe11bd4703eacd1dab93f25ec639c5">shuffle</a> (<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a>< T, N > arr)</td></tr>
|
|
<tr class="separator:a7bfe11bd4703eacd1dab93f25ec639c5"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:affc6ee160142cd017f8c4b213437d0fd" id="r_affc6ee160142cd017f8c4b213437d0fd"><td class="memTemplParams" colspan="2">template<typename T , size_t N> </td></tr>
|
|
<tr class="memitem:affc6ee160142cd017f8c4b213437d0fd"><td class="memTemplItemLeft" align="right" valign="top"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a>< T, N > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#affc6ee160142cd017f8c4b213437d0fd">randomized_bogosort</a> (<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a>< T, N > arr)</td></tr>
|
|
<tr class="separator:affc6ee160142cd017f8c4b213437d0fd"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a2f8bc626eb57acae24a94636a23af6a1" id="r_a2f8bc626eb57acae24a94636a23af6a1"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
|
<tr class="memitem:a2f8bc626eb57acae24a94636a23af6a1"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a2f8bc626eb57acae24a94636a23af6a1">gnomeSort</a> (T *arr, int size)</td></tr>
|
|
<tr class="separator:a2f8bc626eb57acae24a94636a23af6a1"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:aa3677f87b5b4756bc77e9e34c5f27935" id="r_aa3677f87b5b4756bc77e9e34c5f27935"><td class="memTemplParams" colspan="2">template<typename T , size_t size> </td></tr>
|
|
<tr class="memitem:aa3677f87b5b4756bc77e9e34c5f27935"><td class="memTemplItemLeft" align="right" valign="top"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a>< T, size > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#aa3677f87b5b4756bc77e9e34c5f27935">gnomeSort</a> (<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a>< T, size > arr)</td></tr>
|
|
<tr class="separator:aa3677f87b5b4756bc77e9e34c5f27935"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a78cb2f3b97b6db2c062b2a1df05c9ea9" id="r_a78cb2f3b97b6db2c062b2a1df05c9ea9"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
|
<tr class="memitem:a78cb2f3b97b6db2c062b2a1df05c9ea9"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a78cb2f3b97b6db2c062b2a1df05c9ea9">insertionSort</a> (T *arr, int n)</td></tr>
|
|
<tr class="memdesc:a78cb2f3b97b6db2c062b2a1df05c9ea9"><td class="mdescLeft"> </td><td class="mdescRight">Insertion Sort Function. <br /></td></tr>
|
|
<tr class="separator:a78cb2f3b97b6db2c062b2a1df05c9ea9"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a8fe6bac9e03f58abcc2ce26ef3de1b5f" id="r_a8fe6bac9e03f58abcc2ce26ef3de1b5f"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
|
<tr class="memitem:a8fe6bac9e03f58abcc2ce26ef3de1b5f"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a8fe6bac9e03f58abcc2ce26ef3de1b5f">insertionSort</a> (<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< T > *arr)</td></tr>
|
|
<tr class="memdesc:a8fe6bac9e03f58abcc2ce26ef3de1b5f"><td class="mdescLeft"> </td><td class="mdescRight">Insertion Sort for a vector. <br /></td></tr>
|
|
<tr class="separator:a8fe6bac9e03f58abcc2ce26ef3de1b5f"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:aa26de383227859210f14dcf12201a079" id="r_aa26de383227859210f14dcf12201a079"><td class="memTemplParams" colspan="2">template<class Iterator > </td></tr>
|
|
<tr class="memitem:aa26de383227859210f14dcf12201a079"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#aa26de383227859210f14dcf12201a079">merge</a> (Iterator l, Iterator r, const Iterator e, char b[])</td></tr>
|
|
<tr class="memdesc:aa26de383227859210f14dcf12201a079"><td class="mdescLeft"> </td><td class="mdescRight">merges 2 sorted adjacent segments into a larger sorted segment <br /></td></tr>
|
|
<tr class="separator:aa26de383227859210f14dcf12201a079"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a140d913e42fb94176a0b2c8b29a80420" id="r_a140d913e42fb94176a0b2c8b29a80420"><td class="memTemplParams" colspan="2">template<class Iterator > </td></tr>
|
|
<tr class="memitem:a140d913e42fb94176a0b2c8b29a80420"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a140d913e42fb94176a0b2c8b29a80420">non_recursive_merge_sort</a> (const Iterator first, const Iterator last, const size_t n)</td></tr>
|
|
<tr class="memdesc:a140d913e42fb94176a0b2c8b29a80420"><td class="mdescLeft"> </td><td class="mdescRight">bottom-up merge sort which sorts elements in a non-decreasing order <br /></td></tr>
|
|
<tr class="separator:a140d913e42fb94176a0b2c8b29a80420"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a27236b8d3df3832e1f1225576a122534" id="r_a27236b8d3df3832e1f1225576a122534"><td class="memTemplParams" colspan="2">template<class Iterator > </td></tr>
|
|
<tr class="memitem:a27236b8d3df3832e1f1225576a122534"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a27236b8d3df3832e1f1225576a122534">non_recursive_merge_sort</a> (const Iterator first, const size_t n)</td></tr>
|
|
<tr class="memdesc:a27236b8d3df3832e1f1225576a122534"><td class="mdescLeft"> </td><td class="mdescRight">bottom-up merge sort which sorts elements in a non-decreasing order <br /></td></tr>
|
|
<tr class="separator:a27236b8d3df3832e1f1225576a122534"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ae97f4dd815654c4682f564afd718e824" id="r_ae97f4dd815654c4682f564afd718e824"><td class="memTemplParams" colspan="2">template<class Iterator > </td></tr>
|
|
<tr class="memitem:ae97f4dd815654c4682f564afd718e824"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#ae97f4dd815654c4682f564afd718e824">non_recursive_merge_sort</a> (const Iterator first, const Iterator last)</td></tr>
|
|
<tr class="memdesc:ae97f4dd815654c4682f564afd718e824"><td class="mdescLeft"> </td><td class="mdescRight">bottom-up merge sort which sorts elements in a non-decreasing order <br /></td></tr>
|
|
<tr class="separator:ae97f4dd815654c4682f564afd718e824"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a0e9e1b21a1684585e9e50f9afe4d53a3" id="r_a0e9e1b21a1684585e9e50f9afe4d53a3"><td class="memTemplParams" colspan="2">template<<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> N> </td></tr>
|
|
<tr class="memitem:a0e9e1b21a1684585e9e50f9afe4d53a3"><td class="memTemplItemLeft" align="right" valign="top"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a>< int, N > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a0e9e1b21a1684585e9e50f9afe4d53a3">pigeonSort</a> (<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a>< int, N > arr)</td></tr>
|
|
<tr class="separator:a0e9e1b21a1684585e9e50f9afe4d53a3"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a9f59fe72dacc1f1218ef3c303d843168" id="r_a9f59fe72dacc1f1218ef3c303d843168"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
|
<tr class="memitem:a9f59fe72dacc1f1218ef3c303d843168"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a9f59fe72dacc1f1218ef3c303d843168">quicksort</a> (<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< T > *arr, int32_t low, int32_t high)</td></tr>
|
|
<tr class="separator:a9f59fe72dacc1f1218ef3c303d843168"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a6eb67c2f91c98cf4464f75b5882022de" id="r_a6eb67c2f91c98cf4464f75b5882022de"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
|
<tr class="memitem:a6eb67c2f91c98cf4464f75b5882022de"><td class="memTemplItemLeft" align="right" valign="top"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< T > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a6eb67c2f91c98cf4464f75b5882022de">quicksort</a> (<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< T > arr, int32_t low, int32_t high)</td></tr>
|
|
<tr class="separator:a6eb67c2f91c98cf4464f75b5882022de"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:aac8f44b28b4aa96444383030b28f8b34" id="r_aac8f44b28b4aa96444383030b28f8b34"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="#aac8f44b28b4aa96444383030b28f8b34">partition</a> (<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< int > &arr, int start, int end)</td></tr>
|
|
<tr class="memdesc:aac8f44b28b4aa96444383030b28f8b34"><td class="mdescLeft"> </td><td class="mdescRight">The partition function sorts the array from start to end and uses the last element as the pivot. <br /></td></tr>
|
|
<tr class="separator:aac8f44b28b4aa96444383030b28f8b34"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a263595fd9a0163b5b997b89fab3a0dc5" id="r_a263595fd9a0163b5b997b89fab3a0dc5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#a263595fd9a0163b5b997b89fab3a0dc5">iterativeQuickSort</a> (<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< int > &arr)</td></tr>
|
|
<tr class="memdesc:a263595fd9a0163b5b997b89fab3a0dc5"><td class="mdescLeft"> </td><td class="mdescRight">The main sorting function. <br /></td></tr>
|
|
<tr class="separator:a263595fd9a0163b5b997b89fab3a0dc5"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ae3a775d99dbbb94c130a973df0cfddcf" id="r_ae3a775d99dbbb94c130a973df0cfddcf"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
|
<tr class="memitem:ae3a775d99dbbb94c130a973df0cfddcf"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#ae3a775d99dbbb94c130a973df0cfddcf">recursive_bubble_sort</a> (<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< T > *nums, uint64_t n)</td></tr>
|
|
<tr class="memdesc:ae3a775d99dbbb94c130a973df0cfddcf"><td class="mdescLeft"> </td><td class="mdescRight">This is an implementation of the recursive_bubble_sort. A vector is passed to the function which is then dereferenced, so that the changes are reflected in the original vector. It also accepts a second parameter of type <code>int</code> and name <code>n</code>, which is the size of the array. <br /></td></tr>
|
|
<tr class="separator:ae3a775d99dbbb94c130a973df0cfddcf"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a06af4f0dae2de2a2ae5b797d7aa26755" id="r_a06af4f0dae2de2a2ae5b797d7aa26755"><td class="memItemLeft" align="right" valign="top"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< uint64_t > </td><td class="memItemRight" valign="bottom"><a class="el" href="#a06af4f0dae2de2a2ae5b797d7aa26755">selectionSort</a> (const <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< uint64_t > &arr, uint64_t len)</td></tr>
|
|
<tr class="separator:a06af4f0dae2de2a2ae5b797d7aa26755"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a5669396c6a6b1e14b97589b6e37980aa" id="r_a5669396c6a6b1e14b97589b6e37980aa"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
|
<tr class="memitem:a5669396c6a6b1e14b97589b6e37980aa"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a5669396c6a6b1e14b97589b6e37980aa">shell_sort</a> (T *arr, size_t LEN)</td></tr>
|
|
<tr class="separator:a5669396c6a6b1e14b97589b6e37980aa"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a4d76603c54d3dc56146e92d10a043924" id="r_a4d76603c54d3dc56146e92d10a043924"><td class="memTemplParams" colspan="2">template<typename T , size_t N> </td></tr>
|
|
<tr class="memitem:a4d76603c54d3dc56146e92d10a043924"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a4d76603c54d3dc56146e92d10a043924">shell_sort</a> (T(&arr)[N])</td></tr>
|
|
<tr class="separator:a4d76603c54d3dc56146e92d10a043924"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:af2c5b92cbfe73f63f6074c61b0a45331" id="r_af2c5b92cbfe73f63f6074c61b0a45331"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
|
<tr class="memitem:af2c5b92cbfe73f63f6074c61b0a45331"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#af2c5b92cbfe73f63f6074c61b0a45331">shell_sort</a> (<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< T > *arr)</td></tr>
|
|
<tr class="separator:af2c5b92cbfe73f63f6074c61b0a45331"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table>
|
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
|
<div class="textblock"><p>for working with vectors </p>
|
|
<p>for io operations</p>
|
|
<p>for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/is_sorted.html">std::is_sorted</a></p>
|
|
<p>for returning multiple values form a function at once</p>
|
|
<p>Sorting Algorithms.</p>
|
|
<p>for using <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a></p>
|
|
<p>for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a></p>
|
|
<p>Sorting algorithms.</p>
|
|
<p>for algorithm functions for assert for IO operations</p>
|
|
<p>Sorting algorithms</p>
|
|
<p>for assert for typedef datatype uint64_t for IO operations</p>
|
|
<p>Sorting algorithms</p>
|
|
<p>for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/is_sorted.html">std::is_sorted</a>, <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/swap.html">std::swap</a> for assert for io operations</p>
|
|
<p>Sorting algorithms</p>
|
|
<p>for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/is_sorted.html">std::is_sorted</a> for assert for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/swap.html">std::swap</a> and io operations</p>
|
|
<p>@breif Sorting algorithms</p>
|
|
<p>Sorting algorithms</p>
|
|
<p>for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/is_sorted.html">std::is_sorted</a> for assert function in testing for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> and <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a></p>
|
|
<p>Contains sorting algorithms</p>
|
|
<p>for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/is_sorted.html">std::is_sorted</a> for std::assert for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/chrono/c/time.html">std::time</a> for IO operations</p>
|
|
<p>Sorting algorithms</p>
|
|
<p>for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a> for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/stack.html">std::stack</a> for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/is_sorted.html">std::is_sorted</a> for assert</p>
|
|
<p>header files for collection of functions for a macro called assert which can be used to verify assumptions for io operations</p>
|
|
<p>Sorting algorithms</p>
|
|
<p>for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/is_sorted.html">std::is_sorted()</a>, <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/swap.html">std::swap()</a> for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a> for assert for initializing random number generator for IO operations</p>
|
|
<p>Sorting algorithms</p>
|
|
<p>for assert for IO operations for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a> for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a></p>
|
|
<p>Sorting algorithms</p>
|
|
<p>for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/is_sorted.html">std::is_sorted</a> for std::assert for IO operations</p>
|
|
<p>for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/is_sorted.html">std::is_sorted</a> for assert for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/swap.html">std::swap</a> and io operations</p>
|
|
<p>Sorting algorithms</p>
|
|
<p>for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/is_sorted.html">std::is_sorted</a>, <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/swap.html">std::swap</a> for assert for IO operations</p>
|
|
<p>Sorting algorithms </p>
|
|
</div><h2 class="groupheader">Function Documentation</h2>
|
|
<a id="a034d8b276518a902962e87d3158b64fd" name="a034d8b276518a902962e87d3158b64fd"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a034d8b276518a902962e87d3158b64fd">◆ </a></span>binary_search()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<class T > </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">int64_t sorting::binary_search </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< T > &</td> <td class="paramname"><span class="paramname"><em>arr</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">T</td> <td class="paramname"><span class="paramname"><em>val</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int64_t</td> <td class="paramname"><span class="paramname"><em>low</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int64_t</td> <td class="paramname"><span class="paramname"><em>high</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Binary search function to find the most suitable pace for an element. </p>
|
|
<dl class="tparams"><dt>Template Parameters</dt><dd>
|
|
<table class="tparams">
|
|
<tr><td class="paramname">T</td><td>The generic data type. </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">arr</td><td>The actual vector in which we are searching a suitable place for the element.</td></tr>
|
|
<tr><td class="paramname">val</td><td>The value for which suitable place is to be found. </td></tr>
|
|
<tr><td class="paramname">low</td><td>The lower bound of the range we are searching in. </td></tr>
|
|
<tr><td class="paramname">high</td><td>The upper bound of the range we are searching in. </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>the index of most suitable position of val. </dd></dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 63</span> {</div>
|
|
<div class="line"><span class="lineno"> 64</span> <span class="keywordflow">if</span> (high <= low) {</div>
|
|
<div class="line"><span class="lineno"> 65</span> <span class="keywordflow">return</span> (val > arr[low]) ? (low + 1) : low;</div>
|
|
<div class="line"><span class="lineno"> 66</span> }</div>
|
|
<div class="line"><span class="lineno"> 67</span> int64_t mid = low + (high - low) / 2;</div>
|
|
<div class="line"><span class="lineno"> 68</span> <span class="keywordflow">if</span> (arr[mid] > val) {</div>
|
|
<div class="line"><span class="lineno"> 69</span> <span class="keywordflow">return</span> binary_search(arr, val, low, mid - 1);</div>
|
|
<div class="line"><span class="lineno"> 70</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arr[mid] < val) {</div>
|
|
<div class="line"><span class="lineno"> 71</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/binary_search.html">binary_search</a>(arr, val, mid + 1, high);</div>
|
|
<div class="line"><span class="lineno"> 72</span> } <span class="keywordflow">else</span> {</div>
|
|
<div class="line"><span class="lineno"> 73</span> <span class="keywordflow">return</span> mid + 1;</div>
|
|
<div class="line"><span class="lineno"> 74</span> }</div>
|
|
<div class="line"><span class="lineno"> 75</span>}</div>
|
|
<div class="ttc" id="abinary_search_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/binary_search.html">std::binary_search</a></div><div class="ttdeci">T binary_search(T... args)</div></div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_a034d8b276518a902962e87d3158b64fd_cgraph.svg" width="160" height="60"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="aa3677f87b5b4756bc77e9e34c5f27935" name="aa3677f87b5b4756bc77e9e34c5f27935"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#aa3677f87b5b4756bc77e9e34c5f27935">◆ </a></span>gnomeSort() <span class="overload">[1/2]</span></h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<typename T , size_t size> </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a>< T, size > sorting::gnomeSort </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a>< T, size ></td> <td class="paramname"><span class="paramname"><em>arr</em></span></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
<p>This implementation is for a C++-style array input. The function argument is a pass-by-value and hence a copy of the array gets created which is then modified by the function and returned. </p><dl class="tparams"><dt>Template Parameters</dt><dd>
|
|
<table class="tparams">
|
|
<tr><td class="paramname">T</td><td>type of data variables in the array </td></tr>
|
|
<tr><td class="paramname">size</td><td>size of the array </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramdir">[in]</td><td class="paramname">arr</td><td>our array of elements. </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>array with elements sorted </dd></dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 62</span> {</div>
|
|
<div class="line"><span class="lineno"> 63</span> <span class="comment">// few easy cases</span></div>
|
|
<div class="line"><span class="lineno"> 64</span> <span class="keywordflow">if</span> (size <= 1) {</div>
|
|
<div class="line"><span class="lineno"> 65</span> <span class="keywordflow">return</span> arr;</div>
|
|
<div class="line"><span class="lineno"> 66</span> }</div>
|
|
<div class="line"><span class="lineno"> 67</span> </div>
|
|
<div class="line"><span class="lineno"> 68</span> <span class="keywordtype">int</span> index = 0; <span class="comment">// initialize loop index</span></div>
|
|
<div class="line"><span class="lineno"> 69</span> <span class="keywordflow">while</span> (index < size) {</div>
|
|
<div class="line"><span class="lineno"> 70</span> <span class="comment">// check for swap</span></div>
|
|
<div class="line"><span class="lineno"> 71</span> <span class="keywordflow">if</span> ((index == 0) || (arr[index] >= arr[index - 1])) {</div>
|
|
<div class="line"><span class="lineno"> 72</span> index++;</div>
|
|
<div class="line"><span class="lineno"> 73</span> } <span class="keywordflow">else</span> {</div>
|
|
<div class="line"><span class="lineno"> 74</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/swap.html">std::swap</a>(arr[index], arr[index - 1]); <span class="comment">// swap</span></div>
|
|
<div class="line"><span class="lineno"> 75</span> index--;</div>
|
|
<div class="line"><span class="lineno"> 76</span> }</div>
|
|
<div class="line"><span class="lineno"> 77</span> }</div>
|
|
<div class="line"><span class="lineno"> 78</span> <span class="keywordflow">return</span> arr;</div>
|
|
<div class="line"><span class="lineno"> 79</span>}</div>
|
|
<div class="ttc" id="aswap_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/swap.html">std::swap</a></div><div class="ttdeci">T swap(T... args)</div></div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_aa3677f87b5b4756bc77e9e34c5f27935_cgraph.svg" width="268" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a2f8bc626eb57acae24a94636a23af6a1" name="a2f8bc626eb57acae24a94636a23af6a1"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a2f8bc626eb57acae24a94636a23af6a1">◆ </a></span>gnomeSort() <span class="overload">[2/2]</span></h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<typename T > </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void sorting::gnomeSort </td>
|
|
<td>(</td>
|
|
<td class="paramtype">T *</td> <td class="paramname"><span class="paramname"><em>arr</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>size</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
<p>This implementation is for a C-style array input that gets modified in place. </p><dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramdir">[in,out]</td><td class="paramname">arr</td><td>our array of elements. </td></tr>
|
|
<tr><td class="paramdir"></td><td class="paramname">size</td><td>size of given array </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 34</span> {</div>
|
|
<div class="line"><span class="lineno"> 35</span> <span class="comment">// few easy cases</span></div>
|
|
<div class="line"><span class="lineno"> 36</span> <span class="keywordflow">if</span> (size <= 1) {</div>
|
|
<div class="line"><span class="lineno"> 37</span> <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><span class="lineno"> 38</span> }</div>
|
|
<div class="line"><span class="lineno"> 39</span> </div>
|
|
<div class="line"><span class="lineno"> 40</span> <span class="keywordtype">int</span> index = 0; <span class="comment">// initialize some variables.</span></div>
|
|
<div class="line"><span class="lineno"> 41</span> <span class="keywordflow">while</span> (index < size) {</div>
|
|
<div class="line"><span class="lineno"> 42</span> <span class="comment">// check for swap</span></div>
|
|
<div class="line"><span class="lineno"> 43</span> <span class="keywordflow">if</span> ((index == 0) || (arr[index] >= arr[index - 1])) {</div>
|
|
<div class="line"><span class="lineno"> 44</span> index++;</div>
|
|
<div class="line"><span class="lineno"> 45</span> } <span class="keywordflow">else</span> {</div>
|
|
<div class="line"><span class="lineno"> 46</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/swap.html">std::swap</a>(arr[index], arr[index - 1]); <span class="comment">// swap</span></div>
|
|
<div class="line"><span class="lineno"> 47</span> index--;</div>
|
|
<div class="line"><span class="lineno"> 48</span> }</div>
|
|
<div class="line"><span class="lineno"> 49</span> }</div>
|
|
<div class="line"><span class="lineno"> 50</span>}</div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_a2f8bc626eb57acae24a94636a23af6a1_cgraph.svg" width="268" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a8fe6bac9e03f58abcc2ce26ef3de1b5f" name="a8fe6bac9e03f58abcc2ce26ef3de1b5f"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a8fe6bac9e03f58abcc2ce26ef3de1b5f">◆ </a></span>insertionSort() <span class="overload">[1/2]</span></h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<typename T > </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void sorting::insertionSort </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< T > *</td> <td class="paramname"><span class="paramname"><em>arr</em></span></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Insertion Sort for a vector. </p>
|
|
<p>Insertion Sort Function</p>
|
|
<dl class="tparams"><dt>Template Parameters</dt><dd>
|
|
<table class="tparams">
|
|
<tr><td class="paramname">T</td><td>type of array </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramdir">[in,out]</td><td class="paramname">arr</td><td>pointer to array to be sorted</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="tparams"><dt>Template Parameters</dt><dd>
|
|
<table class="tparams">
|
|
<tr><td class="paramname">T</td><td>Type of the vector elements </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramdir">[in,out]</td><td class="paramname">arr</td><td>Pointer to the vector to be sorted </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 77</span> {</div>
|
|
<div class="line"><span class="lineno"> 78</span> <span class="keywordtype">size_t</span> n = arr-><a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>();</div>
|
|
<div class="line"><span class="lineno"> 79</span> </div>
|
|
<div class="line"><span class="lineno"> 80</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 1; i < n; i++) {</div>
|
|
<div class="line"><span class="lineno"> 81</span> T temp = arr[0][i];</div>
|
|
<div class="line"><span class="lineno"> 82</span> int32_t j = i - 1;</div>
|
|
<div class="line"><span class="lineno"> 83</span> <span class="keywordflow">while</span> (j >= 0 && temp < arr[0][j]) {</div>
|
|
<div class="line"><span class="lineno"> 84</span> arr[0][j + 1] = arr[0][j];</div>
|
|
<div class="line"><span class="lineno"> 85</span> j--;</div>
|
|
<div class="line"><span class="lineno"> 86</span> }</div>
|
|
<div class="line"><span class="lineno"> 87</span> arr[0][j + 1] = temp;</div>
|
|
<div class="line"><span class="lineno"> 88</span> }</div>
|
|
<div class="line"><span class="lineno"> 89</span>}</div>
|
|
<div class="ttc" id="asize_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector/size.html">std::vector::size</a></div><div class="ttdeci">T size(T... args)</div></div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_a8fe6bac9e03f58abcc2ce26ef3de1b5f_cgraph.svg" width="316" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a78cb2f3b97b6db2c062b2a1df05c9ea9" name="a78cb2f3b97b6db2c062b2a1df05c9ea9"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a78cb2f3b97b6db2c062b2a1df05c9ea9">◆ </a></span>insertionSort() <span class="overload">[2/2]</span></h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<typename T > </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void sorting::insertionSort </td>
|
|
<td>(</td>
|
|
<td class="paramtype">T *</td> <td class="paramname"><span class="paramname"><em>arr</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>n</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Insertion Sort Function. </p>
|
|
<dl class="tparams"><dt>Template Parameters</dt><dd>
|
|
<table class="tparams">
|
|
<tr><td class="paramname">T</td><td>type of array </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramdir">[in,out]</td><td class="paramname">arr</td><td>Array to be sorted </td></tr>
|
|
<tr><td class="paramdir"></td><td class="paramname">n</td><td>Size of Array</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="tparams"><dt>Template Parameters</dt><dd>
|
|
<table class="tparams">
|
|
<tr><td class="paramname">T</td><td>Type of the array elements </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramdir">[in,out]</td><td class="paramname">arr</td><td>Array to be sorted </td></tr>
|
|
<tr><td class="paramdir"></td><td class="paramname">n</td><td>Size of the array </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 59</span> {</div>
|
|
<div class="line"><span class="lineno"> 60</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 1; i < n; i++) {</div>
|
|
<div class="line"><span class="lineno"> 61</span> T temp = arr[i];</div>
|
|
<div class="line"><span class="lineno"> 62</span> <span class="keywordtype">int</span> j = i - 1;</div>
|
|
<div class="line"><span class="lineno"> 63</span> <span class="keywordflow">while</span> (j >= 0 && temp < arr[j]) {</div>
|
|
<div class="line"><span class="lineno"> 64</span> arr[j + 1] = arr[j];</div>
|
|
<div class="line"><span class="lineno"> 65</span> j--;</div>
|
|
<div class="line"><span class="lineno"> 66</span> }</div>
|
|
<div class="line"><span class="lineno"> 67</span> arr[j + 1] = temp;</div>
|
|
<div class="line"><span class="lineno"> 68</span> }</div>
|
|
<div class="line"><span class="lineno"> 69</span>}</div>
|
|
</div><!-- fragment -->
|
|
</div>
|
|
</div>
|
|
<a id="a5f4bc75cca6dd8294af2d0e328006c68" name="a5f4bc75cca6dd8294af2d0e328006c68"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a5f4bc75cca6dd8294af2d0e328006c68">◆ </a></span>insertionSort_binsrch()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<typename T > </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void sorting::insertionSort_binsrch </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< T > &</td> <td class="paramname"><span class="paramname"><em>arr</em></span></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Insertion sort function to sort the vector. </p>
|
|
<dl class="tparams"><dt>Template Parameters</dt><dd>
|
|
<table class="tparams">
|
|
<tr><td class="paramname">T</td><td>The generic data type. </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">arr</td><td>The actual vector to sort. </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>Void. </dd></dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 84</span> {</div>
|
|
<div class="line"><span class="lineno"> 85</span> int64_t n = arr.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>();</div>
|
|
<div class="line"><span class="lineno"> 86</span> </div>
|
|
<div class="line"><span class="lineno"> 87</span> <span class="keywordflow">for</span> (int64_t i = 1; i < n; i++) {</div>
|
|
<div class="line"><span class="lineno"> 88</span> T key = arr[i];</div>
|
|
<div class="line"><span class="lineno"> 89</span> int64_t j = i - 1;</div>
|
|
<div class="line"><span class="lineno"> 90</span> int64_t loc = <a class="code hl_function" href="#a034d8b276518a902962e87d3158b64fd">sorting::binary_search</a>(arr, key, 0, j);</div>
|
|
<div class="line"><span class="lineno"> 91</span> <span class="keywordflow">while</span> (j >= loc) {</div>
|
|
<div class="line"><span class="lineno"> 92</span> arr[j + 1] = arr[j];</div>
|
|
<div class="line"><span class="lineno"> 93</span> j--;</div>
|
|
<div class="line"><span class="lineno"> 94</span> }</div>
|
|
<div class="line"><span class="lineno"> 95</span> arr[j + 1] = key;</div>
|
|
<div class="line"><span class="lineno"> 96</span> }</div>
|
|
<div class="line"><span class="lineno"> 97</span>}</div>
|
|
<div class="ttc" id="anamespacesorting_html_a034d8b276518a902962e87d3158b64fd"><div class="ttname"><a href="#a034d8b276518a902962e87d3158b64fd">sorting::binary_search</a></div><div class="ttdeci">int64_t binary_search(std::vector< T > &arr, T val, int64_t low, int64_t high)</div><div class="ttdoc">Binary search function to find the most suitable pace for an element.</div><div class="ttdef"><b>Definition</b> binary_insertion_sort.cpp:63</div></div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_a5f4bc75cca6dd8294af2d0e328006c68_cgraph.svg" width="350" height="110"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a263595fd9a0163b5b997b89fab3a0dc5" name="a263595fd9a0163b5b997b89fab3a0dc5"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a263595fd9a0163b5b997b89fab3a0dc5">◆ </a></span>iterativeQuickSort()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void sorting::iterativeQuickSort </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< int > &</td> <td class="paramname"><span class="paramname"><em>arr</em></span></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>The main sorting function. </p>
|
|
<p>The iterative quick sort uses the stack instead of recursion for saving and restoring the environment between calls. It does not need the end and start params, because it is not recursive. </p><dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">arr</td><td>array to be sorted </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 59</span>{</div>
|
|
<div class="line"><span class="lineno"> 60</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/stack.html">std::stack<int></a> <a class="code hl_variable" href="../../dc/dc5/paranthesis__matching_8cpp.html#aa37d24a036d239b3b528f13b9de880c7">stack</a>;</div>
|
|
<div class="line"><span class="lineno"> 61</span> <span class="keywordtype">int</span> start = 0;</div>
|
|
<div class="line"><span class="lineno"> 62</span> <span class="keywordtype">int</span> end = arr.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>()-1;</div>
|
|
<div class="line"><span class="lineno"> 63</span> <a class="code hl_class" href="../../d1/dc2/classstack.html">stack</a>.<a class="code hl_function" href="../../d1/dc2/classstack.html#a90df277532c23519aa7ac3c08ed90a1d">push</a>(start);</div>
|
|
<div class="line"><span class="lineno"> 64</span> <a class="code hl_class" href="../../d1/dc2/classstack.html">stack</a>.<a class="code hl_function" href="../../d1/dc2/classstack.html#a90df277532c23519aa7ac3c08ed90a1d">push</a>(end);</div>
|
|
<div class="line"><span class="lineno"> 65</span> </div>
|
|
<div class="line"><span class="lineno"> 66</span> <span class="keywordflow">while</span>(!<a class="code hl_class" href="../../d1/dc2/classstack.html">stack</a>.empty())</div>
|
|
<div class="line"><span class="lineno"> 67</span> {</div>
|
|
<div class="line"><span class="lineno"> 68</span> end = <a class="code hl_class" href="../../d1/dc2/classstack.html">stack</a>.<a class="code hl_function" href="../../d1/dc2/classstack.html#ae09630c4384903d187801921b2ddc709">top</a>();</div>
|
|
<div class="line"><span class="lineno"> 69</span> <a class="code hl_class" href="../../d1/dc2/classstack.html">stack</a>.<a class="code hl_function" href="../../d1/dc2/classstack.html#a3647fb4418890f19e0dc414b8092b8b0">pop</a>();</div>
|
|
<div class="line"><span class="lineno"> 70</span> start = <a class="code hl_class" href="../../d1/dc2/classstack.html">stack</a>.<a class="code hl_function" href="../../d1/dc2/classstack.html#ae09630c4384903d187801921b2ddc709">top</a>();</div>
|
|
<div class="line"><span class="lineno"> 71</span> <a class="code hl_class" href="../../d1/dc2/classstack.html">stack</a>.<a class="code hl_function" href="../../d1/dc2/classstack.html#a3647fb4418890f19e0dc414b8092b8b0">pop</a>();</div>
|
|
<div class="line"><span class="lineno"> 72</span> </div>
|
|
<div class="line"><span class="lineno"> 73</span> <span class="keywordtype">int</span> pivotIndex = partition(arr,start,end);</div>
|
|
<div class="line"><span class="lineno"> 74</span> </div>
|
|
<div class="line"><span class="lineno"> 75</span> <span class="keywordflow">if</span>(pivotIndex -1 > start)</div>
|
|
<div class="line"><span class="lineno"> 76</span> {</div>
|
|
<div class="line"><span class="lineno"> 77</span> <a class="code hl_class" href="../../d1/dc2/classstack.html">stack</a>.<a class="code hl_function" href="../../d1/dc2/classstack.html#a90df277532c23519aa7ac3c08ed90a1d">push</a>(start);</div>
|
|
<div class="line"><span class="lineno"> 78</span> <a class="code hl_class" href="../../d1/dc2/classstack.html">stack</a>.<a class="code hl_function" href="../../d1/dc2/classstack.html#a90df277532c23519aa7ac3c08ed90a1d">push</a>(pivotIndex-1);</div>
|
|
<div class="line"><span class="lineno"> 79</span> }</div>
|
|
<div class="line"><span class="lineno"> 80</span> </div>
|
|
<div class="line"><span class="lineno"> 81</span> <span class="keywordflow">if</span>(pivotIndex+1<end)</div>
|
|
<div class="line"><span class="lineno"> 82</span> {</div>
|
|
<div class="line"><span class="lineno"> 83</span> <a class="code hl_class" href="../../d1/dc2/classstack.html">stack</a>.<a class="code hl_function" href="../../d1/dc2/classstack.html#a90df277532c23519aa7ac3c08ed90a1d">push</a>(pivotIndex+1);</div>
|
|
<div class="line"><span class="lineno"> 84</span> <a class="code hl_class" href="../../d1/dc2/classstack.html">stack</a>.<a class="code hl_function" href="../../d1/dc2/classstack.html#a90df277532c23519aa7ac3c08ed90a1d">push</a>(end);</div>
|
|
<div class="line"><span class="lineno"> 85</span> }</div>
|
|
<div class="line"><span class="lineno"> 86</span> }</div>
|
|
<div class="line"><span class="lineno"> 87</span>}</div>
|
|
<div class="ttc" id="aclassstack_html"><div class="ttname"><a href="../../d1/dc2/classstack.html">stack</a></div><div class="ttdoc">for std::invalid_argument</div><div class="ttdef"><b>Definition</b> stack.hpp:19</div></div>
|
|
<div class="ttc" id="aclassstack_html_a3647fb4418890f19e0dc414b8092b8b0"><div class="ttname"><a href="../../d1/dc2/classstack.html#a3647fb4418890f19e0dc414b8092b8b0">stack::pop</a></div><div class="ttdeci">void pop()</div><div class="ttdef"><b>Definition</b> stack.hpp:62</div></div>
|
|
<div class="ttc" id="aclassstack_html_a90df277532c23519aa7ac3c08ed90a1d"><div class="ttname"><a href="../../d1/dc2/classstack.html#a90df277532c23519aa7ac3c08ed90a1d">stack::push</a></div><div class="ttdeci">void push(const value_type &item)</div><div class="ttdef"><b>Definition</b> stack.hpp:47</div></div>
|
|
<div class="ttc" id="aclassstack_html_ae09630c4384903d187801921b2ddc709"><div class="ttname"><a href="../../d1/dc2/classstack.html#ae09630c4384903d187801921b2ddc709">stack::top</a></div><div class="ttdeci">value_type top() const</div><div class="ttdef"><b>Definition</b> stack.hpp:56</div></div>
|
|
<div class="ttc" id="aparanthesis__matching_8cpp_html_aa37d24a036d239b3b528f13b9de880c7"><div class="ttname"><a href="../../dc/dc5/paranthesis__matching_8cpp.html#aa37d24a036d239b3b528f13b9de880c7">stack</a></div><div class="ttdeci">char stack[MAX]</div><div class="ttdef"><b>Definition</b> paranthesis_matching.cpp:20</div></div>
|
|
<div class="ttc" id="astack_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/stack.html">std::stack</a></div></div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_a263595fd9a0163b5b997b89fab3a0dc5_cgraph.svg" width="520" height="234"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="aa26de383227859210f14dcf12201a079" name="aa26de383227859210f14dcf12201a079"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#aa26de383227859210f14dcf12201a079">◆ </a></span>merge()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<class Iterator > </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void sorting::merge </td>
|
|
<td>(</td>
|
|
<td class="paramtype">Iterator</td> <td class="paramname"><span class="paramname"><em>l</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">Iterator</td> <td class="paramname"><span class="paramname"><em>r</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const Iterator</td> <td class="paramname"><span class="paramname"><em>e</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">char</td> <td class="paramname"><span class="paramname"><em>b</em></span>[] )</td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>merges 2 sorted adjacent segments into a larger sorted segment </p>
|
|
<p>best-case = worst-case = O(n) </p><dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">l</td><td>points to the left part </td></tr>
|
|
<tr><td class="paramname">r</td><td>points to the right part, end of left part </td></tr>
|
|
<tr><td class="paramname">e</td><td>points to end of right part </td></tr>
|
|
<tr><td class="paramname">b</td><td>points at the buffer </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 57</span> {</div>
|
|
<div class="line"><span class="lineno"> 58</span> <span class="comment">// create 2 pointers to point at the buffer</span></div>
|
|
<div class="line"><span class="lineno"> 59</span> <span class="keyword">auto</span> p(<span class="keyword">reinterpret_cast<</span>std::remove_reference_t<decltype(*l)<span class="keyword">></span>*>(b)), c(p);</div>
|
|
<div class="line"><span class="lineno"> 60</span> <span class="comment">// move the left part of the segment</span></div>
|
|
<div class="line"><span class="lineno"> 61</span> <span class="keywordflow">for</span> (Iterator t(l); r != t; ++t) *p++ = <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/utility/move.html">std::move</a>(*t);</div>
|
|
<div class="line"><span class="lineno"> 62</span> <span class="comment">// while neither the buffer nor the right part has been exhausted</span></div>
|
|
<div class="line"><span class="lineno"> 63</span> <span class="comment">// move the smallest element of the two back to the container</span></div>
|
|
<div class="line"><span class="lineno"> 64</span> <span class="keywordflow">while</span> (e != r && c != p) *l++ = <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/utility/move.html">std::move</a>(*r < *c ? *r++ : *c++);</div>
|
|
<div class="line"><span class="lineno"> 65</span> <span class="comment">// notice only one of the two following loops will be executed</span></div>
|
|
<div class="line"><span class="lineno"> 66</span> <span class="comment">// while the right part hasn't bee exhausted, move it back</span></div>
|
|
<div class="line"><span class="lineno"> 67</span> <span class="keywordflow">while</span> (e != r) *l++ = <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/utility/move.html">std::move</a>(*r++);</div>
|
|
<div class="line"><span class="lineno"> 68</span> <span class="comment">// while the buffer hasn't bee exhausted, move it back</span></div>
|
|
<div class="line"><span class="lineno"> 69</span> <span class="keywordflow">while</span> (c != p) *l++ = <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/utility/move.html">std::move</a>(*c++);</div>
|
|
<div class="line"><span class="lineno"> 70</span>}</div>
|
|
<div class="ttc" id="amove_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/move.html">std::move</a></div><div class="ttdeci">T move(T... args)</div></div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_aa26de383227859210f14dcf12201a079_cgraph.svg" width="243" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ae97f4dd815654c4682f564afd718e824" name="ae97f4dd815654c4682f564afd718e824"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ae97f4dd815654c4682f564afd718e824">◆ </a></span>non_recursive_merge_sort() <span class="overload">[1/3]</span></h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<class Iterator > </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void sorting::non_recursive_merge_sort </td>
|
|
<td>(</td>
|
|
<td class="paramtype">const Iterator</td> <td class="paramname"><span class="paramname"><em>first</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const Iterator</td> <td class="paramname"><span class="paramname"><em>last</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>bottom-up merge sort which sorts elements in a non-decreasing order </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">first</td><td>points to the first element </td></tr>
|
|
<tr><td class="paramname">last</td><td>points to 1-step past the last element </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 86</span> {</div>
|
|
<div class="line"><span class="lineno"> 87</span> non_recursive_merge_sort(first, last, last - first);</div>
|
|
<div class="line"><span class="lineno"> 88</span>}</div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_ae97f4dd815654c4682f564afd718e824_cgraph.svg" width="638" height="52"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a140d913e42fb94176a0b2c8b29a80420" name="a140d913e42fb94176a0b2c8b29a80420"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a140d913e42fb94176a0b2c8b29a80420">◆ </a></span>non_recursive_merge_sort() <span class="overload">[2/3]</span></h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<class Iterator > </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void sorting::non_recursive_merge_sort </td>
|
|
<td>(</td>
|
|
<td class="paramtype">const Iterator</td> <td class="paramname"><span class="paramname"><em>first</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const Iterator</td> <td class="paramname"><span class="paramname"><em>last</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const size_t</td> <td class="paramname"><span class="paramname"><em>n</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>bottom-up merge sort which sorts elements in a non-decreasing order </p>
|
|
<p>sorts elements non-recursively by breaking them into small segments, merging adjacent segments into larger sorted segments, then increasing the sizes of segments by factors of 2 and repeating the same process. best-case = worst-case = O(n log(n)) </p><dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">first</td><td>points to the first element </td></tr>
|
|
<tr><td class="paramname">last</td><td>points to 1-step past the last element </td></tr>
|
|
<tr><td class="paramname">n</td><td>the number of elements </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 26</span> {</div>
|
|
<div class="line"><span class="lineno"> 27</span> <span class="comment">// create a buffer large enough to store all elements</span></div>
|
|
<div class="line"><span class="lineno"> 28</span> <span class="comment">// dynamically allocated to comply with cpplint</span></div>
|
|
<div class="line"><span class="lineno"> 29</span> <span class="keywordtype">char</span>* buffer = <span class="keyword">new</span> <span class="keywordtype">char</span>[n * <span class="keyword">sizeof</span>(*first)];</div>
|
|
<div class="line"><span class="lineno"> 30</span> <span class="comment">// buffer size can be optimized to largest power of 2 less than n</span></div>
|
|
<div class="line"><span class="lineno"> 31</span> <span class="comment">// elements divide the container into equally-sized segments whose</span></div>
|
|
<div class="line"><span class="lineno"> 32</span> <span class="comment">// length start at 1 and keeps increasing by factors of 2</span></div>
|
|
<div class="line"><span class="lineno"> 33</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> length(1); length < n; length <<= 1) {</div>
|
|
<div class="line"><span class="lineno"> 34</span> <span class="comment">// merge adjacent segments whose number is n / (length * 2)</span></div>
|
|
<div class="line"><span class="lineno"> 35</span> Iterator left(first);</div>
|
|
<div class="line"><span class="lineno"> 36</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> counter(n / (length << 1)); counter; --counter) {</div>
|
|
<div class="line"><span class="lineno"> 37</span> Iterator right(left + length), end(right + length);</div>
|
|
<div class="line"><span class="lineno"> 38</span> <a class="code hl_function" href="../../d5/d4c/group__sorting.html#ga460c61cd948203b4816bef2accb3fc73">merge</a>(left, right, end, buffer);</div>
|
|
<div class="line"><span class="lineno"> 39</span> left = end;</div>
|
|
<div class="line"><span class="lineno"> 40</span> }</div>
|
|
<div class="line"><span class="lineno"> 41</span> <span class="comment">// if the number of remaining elements (n * 2 % length) is longer</span></div>
|
|
<div class="line"><span class="lineno"> 42</span> <span class="comment">// than a segment, merge the remaining elements</span></div>
|
|
<div class="line"><span class="lineno"> 43</span> <span class="keywordflow">if</span> ((n & ((length << 1) - 1)) > length)</div>
|
|
<div class="line"><span class="lineno"> 44</span> <a class="code hl_function" href="../../d5/d4c/group__sorting.html#ga460c61cd948203b4816bef2accb3fc73">merge</a>(left, left + length, last, buffer);</div>
|
|
<div class="line"><span class="lineno"> 45</span> }</div>
|
|
<div class="line"><span class="lineno"> 46</span> <span class="keyword">delete</span>[] buffer;</div>
|
|
<div class="line"><span class="lineno"> 47</span>}</div>
|
|
<div class="ttc" id="agroup__sorting_html_ga460c61cd948203b4816bef2accb3fc73"><div class="ttname"><a href="../../d5/d4c/group__sorting.html#ga460c61cd948203b4816bef2accb3fc73">merge</a></div><div class="ttdeci">void merge(int *arr, int l, int m, int r)</div><div class="ttdef"><b>Definition</b> merge_sort.cpp:33</div></div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_a140d913e42fb94176a0b2c8b29a80420_cgraph.svg" width="440" height="52"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a27236b8d3df3832e1f1225576a122534" name="a27236b8d3df3832e1f1225576a122534"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a27236b8d3df3832e1f1225576a122534">◆ </a></span>non_recursive_merge_sort() <span class="overload">[3/3]</span></h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<class Iterator > </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void sorting::non_recursive_merge_sort </td>
|
|
<td>(</td>
|
|
<td class="paramtype">const Iterator</td> <td class="paramname"><span class="paramname"><em>first</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const size_t</td> <td class="paramname"><span class="paramname"><em>n</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>bottom-up merge sort which sorts elements in a non-decreasing order </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">first</td><td>points to the first element </td></tr>
|
|
<tr><td class="paramname">n</td><td>the number of elements </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 77</span> {</div>
|
|
<div class="line"><span class="lineno"> 78</span> non_recursive_merge_sort(first, first + n, n);</div>
|
|
<div class="line"><span class="lineno"> 79</span>}</div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_a27236b8d3df3832e1f1225576a122534_cgraph.svg" width="638" height="52"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="aac8f44b28b4aa96444383030b28f8b34" name="aac8f44b28b4aa96444383030b28f8b34"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#aac8f44b28b4aa96444383030b28f8b34">◆ </a></span>partition()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">int sorting::partition </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< int > &</td> <td class="paramname"><span class="paramname"><em>arr</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>start</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>end</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>The partition function sorts the array from start to end and uses the last element as the pivot. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">arr</td><td>the array to be sorted </td></tr>
|
|
<tr><td class="paramname">start</td><td>starting index </td></tr>
|
|
<tr><td class="paramname">end</td><td>ending index </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>int next index of the pivot </dd></dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 34</span>{</div>
|
|
<div class="line"><span class="lineno"> 35</span> <span class="keywordtype">int</span> pivot = arr[end];</div>
|
|
<div class="line"><span class="lineno"> 36</span> <span class="keywordtype">int</span> index = start - 1;</div>
|
|
<div class="line"><span class="lineno"> 37</span> </div>
|
|
<div class="line"><span class="lineno"> 38</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = start; j < end; j++) {</div>
|
|
<div class="line"><span class="lineno"> 39</span> <span class="keywordflow">if</span> (arr[j] <= pivot) {</div>
|
|
<div class="line"><span class="lineno"> 40</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/swap.html">std::swap</a>(arr[++index], arr[j]);</div>
|
|
<div class="line"><span class="lineno"> 41</span> }</div>
|
|
<div class="line"><span class="lineno"> 42</span> }</div>
|
|
<div class="line"><span class="lineno"> 43</span> </div>
|
|
<div class="line"><span class="lineno"> 44</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/swap.html">std::swap</a>(arr[index + 1], arr[end]);</div>
|
|
<div class="line"><span class="lineno"> 45</span> <span class="keywordflow">return</span> index + 1;</div>
|
|
<div class="line"><span class="lineno"> 46</span>}</div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_aac8f44b28b4aa96444383030b28f8b34_cgraph.svg" width="252" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a0e9e1b21a1684585e9e50f9afe4d53a3" name="a0e9e1b21a1684585e9e50f9afe4d53a3"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a0e9e1b21a1684585e9e50f9afe4d53a3">◆ </a></span>pigeonSort()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> N> </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a>< int, N > sorting::pigeonSort </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a>< int, N ></td> <td class="paramname"><span class="paramname"><em>arr</em></span></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
<p>Pigeonhole sorting of array of size n The function will sort the array through Pigeonhole algorithm and print </p><dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">arr</td><td>unsorted array of elements </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>sorted array of elements </dd></dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 34</span> {</div>
|
|
<div class="line"><span class="lineno"> 35</span> <span class="comment">// Finding min and max*</span></div>
|
|
<div class="line"><span class="lineno"> 36</span> <span class="keyword">auto</span> min = <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/min_element.html">std::min_element</a>(<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/begin.html">std::begin</a>(arr), <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/end.html">std::end</a>(arr));</div>
|
|
<div class="line"><span class="lineno"> 37</span> <span class="keyword">auto</span> max = <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/max_element.html">std::max_element</a>(<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/begin.html">std::begin</a>(arr), <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/end.html">std::end</a>(arr));</div>
|
|
<div class="line"><span class="lineno"> 38</span> </div>
|
|
<div class="line"><span class="lineno"> 39</span> <span class="comment">// Range refers to the number of holes required</span></div>
|
|
<div class="line"><span class="lineno"> 40</span> <span class="keywordtype">int</span> range = *max - *min + 1;</div>
|
|
<div class="line"><span class="lineno"> 41</span> <span class="keywordtype">int</span> *hole = <span class="keyword">new</span> <span class="keywordtype">int</span>[range]();</div>
|
|
<div class="line"><span class="lineno"> 42</span> </div>
|
|
<div class="line"><span class="lineno"> 43</span> <span class="comment">// Copying all array values to pigeonhole</span></div>
|
|
<div class="line"><span class="lineno"> 44</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < N; i++) {</div>
|
|
<div class="line"><span class="lineno"> 45</span> hole[arr[i] - *min] = arr[i];</div>
|
|
<div class="line"><span class="lineno"> 46</span> }</div>
|
|
<div class="line"><span class="lineno"> 47</span> </div>
|
|
<div class="line"><span class="lineno"> 48</span> <span class="comment">// Deleting elements from list and storing to original array</span></div>
|
|
<div class="line"><span class="lineno"> 49</span> <span class="keywordtype">int</span> count = 0;</div>
|
|
<div class="line"><span class="lineno"> 50</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < range; i++) {</div>
|
|
<div class="line"><span class="lineno"> 51</span> <span class="keywordflow">while</span> (hole[i] != <span class="charliteral">'\0'</span>) {</div>
|
|
<div class="line"><span class="lineno"> 52</span> arr[count] = hole[i];</div>
|
|
<div class="line"><span class="lineno"> 53</span> hole[i] = {};</div>
|
|
<div class="line"><span class="lineno"> 54</span> count++;</div>
|
|
<div class="line"><span class="lineno"> 55</span> }</div>
|
|
<div class="line"><span class="lineno"> 56</span> }</div>
|
|
<div class="line"><span class="lineno"> 57</span> <span class="keyword">delete</span>[] hole;</div>
|
|
<div class="line"><span class="lineno"> 58</span> </div>
|
|
<div class="line"><span class="lineno"> 59</span> <span class="keywordflow">return</span> arr;</div>
|
|
<div class="line"><span class="lineno"> 60</span>}</div>
|
|
<div class="ttc" id="abegin_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/iterator/begin.html">std::begin</a></div><div class="ttdeci">T begin(T... args)</div></div>
|
|
<div class="ttc" id="aend_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/iterator/end.html">std::end</a></div><div class="ttdeci">T end(T... args)</div></div>
|
|
<div class="ttc" id="amax_element_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/max_element.html">std::max_element</a></div><div class="ttdeci">T max_element(T... args)</div></div>
|
|
<div class="ttc" id="amin_element_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/min_element.html">std::min_element</a></div><div class="ttdeci">T min_element(T... args)</div></div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_a0e9e1b21a1684585e9e50f9afe4d53a3_cgraph.svg" width="315" height="184"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a9f59fe72dacc1f1218ef3c303d843168" name="a9f59fe72dacc1f1218ef3c303d843168"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a9f59fe72dacc1f1218ef3c303d843168">◆ </a></span>quicksort() <span class="overload">[1/2]</span></h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<typename T > </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void sorting::quicksort </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< T > *</td> <td class="paramname"><span class="paramname"><em>arr</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int32_t</td> <td class="paramname"><span class="paramname"><em>low</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int32_t</td> <td class="paramname"><span class="paramname"><em>high</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
<p>3-way partition based quick sort. This function accepts array pointer and modified the input array. </p><dl class="tparams"><dt>Template Parameters</dt><dd>
|
|
<table class="tparams">
|
|
<tr><td class="paramname">T</td><td>type of data in the vector array </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramdir">[in,out]</td><td class="paramname">arr</td><td>vector array to sort </td></tr>
|
|
<tr><td class="paramdir">[in]</td><td class="paramname">low</td><td>lower limit of window to partition </td></tr>
|
|
<tr><td class="paramdir">[in]</td><td class="paramname">high</td><td>upper limit of window to partition </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 94</span> {</div>
|
|
<div class="line"><span class="lineno"> 95</span> <span class="keywordflow">if</span> (low >= high) { <span class="comment">// 1 or 0 elements</span></div>
|
|
<div class="line"><span class="lineno"> 96</span> <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><span class="lineno"> 97</span> }</div>
|
|
<div class="line"><span class="lineno"> 98</span> </div>
|
|
<div class="line"><span class="lineno"> 99</span> int32_t i = 0, j = 0;</div>
|
|
<div class="line"><span class="lineno"> 100</span> </div>
|
|
<div class="line"><span class="lineno"> 101</span> <span class="comment">// i and j are passed as reference</span></div>
|
|
<div class="line"><span class="lineno"> 102</span> partition3(arr, low, high, &i, &j);</div>
|
|
<div class="line"><span class="lineno"> 103</span> </div>
|
|
<div class="line"><span class="lineno"> 104</span> <span class="comment">// Recur two halves</span></div>
|
|
<div class="line"><span class="lineno"> 105</span> quicksort(arr, low, i);</div>
|
|
<div class="line"><span class="lineno"> 106</span> quicksort(arr, j, high);</div>
|
|
<div class="line"><span class="lineno"> 107</span>}</div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_a9f59fe72dacc1f1218ef3c303d843168_cgraph.svg" width="132" height="60"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a6eb67c2f91c98cf4464f75b5882022de" name="a6eb67c2f91c98cf4464f75b5882022de"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a6eb67c2f91c98cf4464f75b5882022de">◆ </a></span>quicksort() <span class="overload">[2/2]</span></h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<typename T > </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< T > sorting::quicksort </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< T ></td> <td class="paramname"><span class="paramname"><em>arr</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int32_t</td> <td class="paramname"><span class="paramname"><em>low</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">int32_t</td> <td class="paramname"><span class="paramname"><em>high</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
<p>3-way partition based quick sort. This function accepts array by value and creates a copy of it. The array copy gets sorted and returned by the function. </p><dl class="tparams"><dt>Template Parameters</dt><dd>
|
|
<table class="tparams">
|
|
<tr><td class="paramname">T</td><td>type of data in the vector array </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramdir">[in]</td><td class="paramname">arr</td><td>vector array to sort </td></tr>
|
|
<tr><td class="paramdir">[in]</td><td class="paramname">low</td><td>lower limit of window to partition </td></tr>
|
|
<tr><td class="paramdir">[in]</td><td class="paramname">high</td><td>upper limit of window to partition </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>sorted array vector </dd></dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 119</span> {</div>
|
|
<div class="line"><span class="lineno"> 120</span> <span class="keywordflow">if</span> (low >= high) { <span class="comment">// 1 or 0 elements</span></div>
|
|
<div class="line"><span class="lineno"> 121</span> <span class="keywordflow">return</span> arr;</div>
|
|
<div class="line"><span class="lineno"> 122</span> }</div>
|
|
<div class="line"><span class="lineno"> 123</span> </div>
|
|
<div class="line"><span class="lineno"> 124</span> int32_t i = 0, j = 0;</div>
|
|
<div class="line"><span class="lineno"> 125</span> </div>
|
|
<div class="line"><span class="lineno"> 126</span> <span class="comment">// i and j are passed as reference</span></div>
|
|
<div class="line"><span class="lineno"> 127</span> partition3(&arr, low, high, &i, &j);</div>
|
|
<div class="line"><span class="lineno"> 128</span> </div>
|
|
<div class="line"><span class="lineno"> 129</span> <span class="comment">// Recur two halves</span></div>
|
|
<div class="line"><span class="lineno"> 130</span> quicksort(&arr, low, i);</div>
|
|
<div class="line"><span class="lineno"> 131</span> quicksort(&arr, j, high);</div>
|
|
<div class="line"><span class="lineno"> 132</span> </div>
|
|
<div class="line"><span class="lineno"> 133</span> <span class="keywordflow">return</span> arr;</div>
|
|
<div class="line"><span class="lineno"> 134</span>}</div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_a6eb67c2f91c98cf4464f75b5882022de_cgraph.svg" width="302" height="60"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="affc6ee160142cd017f8c4b213437d0fd" name="affc6ee160142cd017f8c4b213437d0fd"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#affc6ee160142cd017f8c4b213437d0fd">◆ </a></span>randomized_bogosort()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<typename T , size_t N> </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a>< T, N > sorting::randomized_bogosort </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a>< T, N ></td> <td class="paramname"><span class="paramname"><em>arr</em></span></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
<p>Implement randomized Bogosort algorithm and sort the elements of a given array. </p><dl class="tparams"><dt>Template Parameters</dt><dd>
|
|
<table class="tparams">
|
|
<tr><td class="paramname">T</td><td>typename of the array </td></tr>
|
|
<tr><td class="paramname">N</td><td>length of array </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">arr</td><td>array to sort </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>new array with elements sorted from a given array </dd></dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 52</span> {</div>
|
|
<div class="line"><span class="lineno"> 53</span> <span class="comment">// Untill array is not sorted</span></div>
|
|
<div class="line"><span class="lineno"> 54</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/numeric/random/random_device.html">std::random_device</a> random_device;</div>
|
|
<div class="line"><span class="lineno"> 55</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/numeric/random/mersenne_twister_engine.html">std::mt19937</a> generator(random_device());</div>
|
|
<div class="line"><span class="lineno"> 56</span> <span class="keywordflow">while</span> (!<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/is_sorted.html">std::is_sorted</a>(arr.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array/begin.html">begin</a>(), arr.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array/end.html">end</a>())) {</div>
|
|
<div class="line"><span class="lineno"> 57</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/random_shuffle.html">std::shuffle</a>(arr.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array/begin.html">begin</a>(), arr.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array/end.html">end</a>(), generator);<span class="comment">// Shuffle the array</span></div>
|
|
<div class="line"><span class="lineno"> 58</span> }</div>
|
|
<div class="line"><span class="lineno"> 59</span> <span class="keywordflow">return</span> arr;</div>
|
|
<div class="line"><span class="lineno"> 60</span>}</div>
|
|
<div class="ttc" id="ais_sorted_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/is_sorted.html">std::is_sorted</a></div><div class="ttdeci">T is_sorted(T... args)</div></div>
|
|
<div class="ttc" id="amersenne_twister_engine_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/numeric/random/mersenne_twister_engine.html">std::mt19937</a></div></div>
|
|
<div class="ttc" id="arandom_device_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/numeric/random/random_device.html">std::random_device</a></div></div>
|
|
<div class="ttc" id="arandom_shuffle_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/random_shuffle.html">std::shuffle</a></div><div class="ttdeci">T shuffle(T... args)</div></div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_affc6ee160142cd017f8c4b213437d0fd_cgraph.svg" width="310" height="184"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ae3a775d99dbbb94c130a973df0cfddcf" name="ae3a775d99dbbb94c130a973df0cfddcf"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ae3a775d99dbbb94c130a973df0cfddcf">◆ </a></span>recursive_bubble_sort()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<typename T > </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void sorting::recursive_bubble_sort </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< T > *</td> <td class="paramname"><span class="paramname"><em>nums</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>n</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>This is an implementation of the recursive_bubble_sort. A vector is passed to the function which is then dereferenced, so that the changes are reflected in the original vector. It also accepts a second parameter of type <code>int</code> and name <code>n</code>, which is the size of the array. </p>
|
|
<dl class="tparams"><dt>Template Parameters</dt><dd>
|
|
<table class="tparams">
|
|
<tr><td class="paramname">T</td><td>type of data variables in the array </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">nums</td><td>our array of elements. </td></tr>
|
|
<tr><td class="paramname">n</td><td>size of the array </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<p>< base case; when size of the array is 1</p>
|
|
<p>< iterating over the entire array</p>
|
|
<p>< if a larger number appears before the smaller one, swap them.</p>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 74</span> {</div>
|
|
<div class="line"><span class="lineno"> 75</span> <span class="keywordflow">if</span> (n == 1) { <span class="comment">//!< base case; when size of the array is 1</span></div>
|
|
<div class="line"><span class="lineno"> 76</span> <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><span class="lineno"> 77</span> }</div>
|
|
<div class="line"><span class="lineno"> 78</span> </div>
|
|
<div class="line"><span class="lineno"> 79</span> <span class="keywordflow">for</span> (uint64_t i = 0; i < n - 1; i++) { <span class="comment">//!< iterating over the entire array</span><span class="comment"></span></div>
|
|
<div class="line"><span class="lineno"> 80</span><span class="comment"> //!< if a larger number appears before the smaller one, swap them.</span></div>
|
|
<div class="line"><span class="lineno"> 81</span><span class="comment"></span> <span class="keywordflow">if</span> ((*nums)[i] > (*nums)[i + 1]) {</div>
|
|
<div class="line"><span class="lineno"> 82</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/swap.html">std::swap</a>((*nums)[i], (*nums)[i + 1]);</div>
|
|
<div class="line"><span class="lineno"> 83</span> }</div>
|
|
<div class="line"><span class="lineno"> 84</span> }</div>
|
|
<div class="line"><span class="lineno"> 85</span><span class="comment"></span> </div>
|
|
<div class="line"><span class="lineno"> 86</span><span class="comment"> //!< calling the function after we have fixed the last element</span></div>
|
|
<div class="line"><span class="lineno"> 87</span><span class="comment"></span> <a class="code hl_function" href="#ae3a775d99dbbb94c130a973df0cfddcf">recursive_bubble_sort</a>(nums, n - 1);</div>
|
|
<div class="line"><span class="lineno"> 88</span>}</div>
|
|
<div class="ttc" id="anamespacesorting_html_ae3a775d99dbbb94c130a973df0cfddcf"><div class="ttname"><a href="#ae3a775d99dbbb94c130a973df0cfddcf">sorting::recursive_bubble_sort</a></div><div class="ttdeci">void recursive_bubble_sort(std::vector< T > *nums, uint64_t n)</div><div class="ttdoc">This is an implementation of the recursive_bubble_sort. A vector is passed to the function which is t...</div><div class="ttdef"><b>Definition</b> recursive_bubble_sort.cpp:74</div></div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_ae3a775d99dbbb94c130a973df0cfddcf_cgraph.svg" width="259" height="76"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a06af4f0dae2de2a2ae5b797d7aa26755" name="a06af4f0dae2de2a2ae5b797d7aa26755"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a06af4f0dae2de2a2ae5b797d7aa26755">◆ </a></span>selectionSort()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< uint64_t > sorting::selectionSort </td>
|
|
<td>(</td>
|
|
<td class="paramtype">const <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< uint64_t > &</td> <td class="paramname"><span class="paramname"><em>arr</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>len</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
<div class="fragment"><div class="line"><span class="lineno"> 48</span> {</div>
|
|
<div class="line"><span class="lineno"> 49</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector<uint64_t></a> array(</div>
|
|
<div class="line"><span class="lineno"> 50</span> arr.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/begin.html">begin</a>(),</div>
|
|
<div class="line"><span class="lineno"> 51</span> arr.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/end.html">end</a>()); <span class="comment">// declare a vector in which result will be stored</span></div>
|
|
<div class="line"><span class="lineno"> 52</span> <span class="keywordflow">for</span> (uint64_t it = 0; it < len; ++it) {</div>
|
|
<div class="line"><span class="lineno"> 53</span> uint64_t min = it; <span class="comment">// set min value</span></div>
|
|
<div class="line"><span class="lineno"> 54</span> <span class="keywordflow">for</span> (uint64_t it2 = it + 1; it2 < len; ++it2) {</div>
|
|
<div class="line"><span class="lineno"> 55</span> <span class="keywordflow">if</span> (array[it2] < array[min]) { <span class="comment">// check which element is smaller</span></div>
|
|
<div class="line"><span class="lineno"> 56</span> min = it2; <span class="comment">// store index of smallest element to min</span></div>
|
|
<div class="line"><span class="lineno"> 57</span> }</div>
|
|
<div class="line"><span class="lineno"> 58</span> }</div>
|
|
<div class="line"><span class="lineno"> 59</span> </div>
|
|
<div class="line"><span class="lineno"> 60</span> <span class="keywordflow">if</span> (min != it) { <span class="comment">// swap if min does not match to i</span></div>
|
|
<div class="line"><span class="lineno"> 61</span> uint64_t tmp = array[<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/min.html">min</a>];</div>
|
|
<div class="line"><span class="lineno"> 62</span> array[<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/min.html">min</a>] = array[it];</div>
|
|
<div class="line"><span class="lineno"> 63</span> array[it] = tmp;</div>
|
|
<div class="line"><span class="lineno"> 64</span> }</div>
|
|
<div class="line"><span class="lineno"> 65</span> }</div>
|
|
<div class="line"><span class="lineno"> 66</span> </div>
|
|
<div class="line"><span class="lineno"> 67</span> <span class="keywordflow">return</span> array; <span class="comment">// return sorted vector</span></div>
|
|
<div class="line"><span class="lineno"> 68</span>}</div>
|
|
<div class="ttc" id="amin_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a></div><div class="ttdeci">T min(T... args)</div></div>
|
|
<div class="ttc" id="avector_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a></div></div>
|
|
</div><!-- fragment -->
|
|
</div>
|
|
</div>
|
|
<a id="af2c5b92cbfe73f63f6074c61b0a45331" name="af2c5b92cbfe73f63f6074c61b0a45331"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#af2c5b92cbfe73f63f6074c61b0a45331">◆ </a></span>shell_sort() <span class="overload">[1/3]</span></h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<typename T > </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void sorting::shell_sort </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>< T > *</td> <td class="paramname"><span class="paramname"><em>arr</em></span></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
<p>function overload - when input array is of type <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>, simply send the data content and the data length to the above function. </p>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 75</span> {</div>
|
|
<div class="line"><span class="lineno"> 76</span> shell_sort(arr-><a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/data.html">data</a>(), arr-><a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>());</div>
|
|
<div class="line"><span class="lineno"> 77</span>}</div>
|
|
<div class="ttc" id="adata_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector/data.html">std::vector::data</a></div><div class="ttdeci">T data(T... args)</div></div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_af2c5b92cbfe73f63f6074c61b0a45331_cgraph.svg" width="308" height="135"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a5669396c6a6b1e14b97589b6e37980aa" name="a5669396c6a6b1e14b97589b6e37980aa"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a5669396c6a6b1e14b97589b6e37980aa">◆ </a></span>shell_sort() <span class="overload">[2/3]</span></h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<typename T > </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void sorting::shell_sort </td>
|
|
<td>(</td>
|
|
<td class="paramtype">T *</td> <td class="paramname"><span class="paramname"><em>arr</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">size_t</td> <td class="paramname"><span class="paramname"><em>LEN</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
<p>Optimized algorithm - takes half the time by utilizing Mar </p>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 45</span> {</div>
|
|
<div class="line"><span class="lineno"> 46</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> gaps[] = {701, 301, 132, 57, 23, 10, 4, 1};</div>
|
|
<div class="line"><span class="lineno"> 47</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> gap_len = 8;</div>
|
|
<div class="line"><span class="lineno"> 48</span> <span class="keywordtype">size_t</span> i, j, g;</div>
|
|
<div class="line"><span class="lineno"> 49</span> </div>
|
|
<div class="line"><span class="lineno"> 50</span> <span class="keywordflow">for</span> (g = 0; g < gap_len; g++) {</div>
|
|
<div class="line"><span class="lineno"> 51</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> gap = gaps[g];</div>
|
|
<div class="line"><span class="lineno"> 52</span> <span class="keywordflow">for</span> (i = gap; i < LEN; i++) {</div>
|
|
<div class="line"><span class="lineno"> 53</span> T tmp = arr[i];</div>
|
|
<div class="line"><span class="lineno"> 54</span> </div>
|
|
<div class="line"><span class="lineno"> 55</span> <span class="keywordflow">for</span> (j = i; j >= gap && (arr[j - gap] - tmp) > 0; j -= gap) {</div>
|
|
<div class="line"><span class="lineno"> 56</span> arr[j] = arr[j - gap];</div>
|
|
<div class="line"><span class="lineno"> 57</span> }</div>
|
|
<div class="line"><span class="lineno"> 58</span> </div>
|
|
<div class="line"><span class="lineno"> 59</span> arr[j] = tmp;</div>
|
|
<div class="line"><span class="lineno"> 60</span> }</div>
|
|
<div class="line"><span class="lineno"> 61</span> }</div>
|
|
<div class="line"><span class="lineno"> 62</span>}</div>
|
|
</div><!-- fragment -->
|
|
</div>
|
|
</div>
|
|
<a id="a4d76603c54d3dc56146e92d10a043924" name="a4d76603c54d3dc56146e92d10a043924"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a4d76603c54d3dc56146e92d10a043924">◆ </a></span>shell_sort() <span class="overload">[3/3]</span></h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<typename T , size_t N> </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void sorting::shell_sort </td>
|
|
<td>(</td>
|
|
<td class="paramtype">T(&)</td> <td class="paramname"><span class="paramname"><em>arr</em></span>[N]</td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
<p>function overload - when input array is of a known length array type </p>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 67</span> {</div>
|
|
<div class="line"><span class="lineno"> 68</span> shell_sort(arr, N);</div>
|
|
<div class="line"><span class="lineno"> 69</span>}</div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_a4d76603c54d3dc56146e92d10a043924_cgraph.svg" width="308" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a7bfe11bd4703eacd1dab93f25ec639c5" name="a7bfe11bd4703eacd1dab93f25ec639c5"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a7bfe11bd4703eacd1dab93f25ec639c5">◆ </a></span>shuffle()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<div class="memtemplate">
|
|
template<typename T , size_t N> </div>
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a>< T, N > sorting::shuffle </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a>< T, N ></td> <td class="paramname"><span class="paramname"><em>arr</em></span></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
<p>Function to shuffle the elements of an array. (for reference) </p><dl class="tparams"><dt>Template Parameters</dt><dd>
|
|
<table class="tparams">
|
|
<tr><td class="paramname">T</td><td>typename of the array </td></tr>
|
|
<tr><td class="paramname">N</td><td>length of array </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">arr</td><td>array to shuffle </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>new array with elements shuffled from a given array </dd></dl>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 37</span> {</div>
|
|
<div class="line"><span class="lineno"> 38</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < N; i++) {</div>
|
|
<div class="line"><span class="lineno"> 39</span> <span class="comment">// Swaps i'th index with random index (less than array size)</span></div>
|
|
<div class="line"><span class="lineno"> 40</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/swap.html">std::swap</a>(arr[i], arr[<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/numeric/random/rand.html">std::rand</a>() % N]);</div>
|
|
<div class="line"><span class="lineno"> 41</span> }</div>
|
|
<div class="line"><span class="lineno"> 42</span> <span class="keywordflow">return</span> arr;</div>
|
|
<div class="line"><span class="lineno"> 43</span>}</div>
|
|
<div class="ttc" id="arand_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/numeric/random/rand.html">std::rand</a></div><div class="ttdeci">T rand(T... args)</div></div>
|
|
</div><!-- fragment --><div class="dynheader">
|
|
Here is the call graph for this function:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d5/d91/namespacesorting_a7bfe11bd4703eacd1dab93f25ec639c5_cgraph.svg" width="244" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div><!-- contents -->
|
|
</div><!-- doc-content -->
|
|
<!-- start footer part -->
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|
<ul>
|
|
<li class="navelem"><a class="el" href="../../d5/d91/namespacesorting.html">sorting</a></li>
|
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 </li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|