Files
C-Plus-Plus/dd/da8/pigeonhole__sort_8cpp.html
2025-07-09 10:53:16 +00:00

333 lines
21 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- HTML header for doxygen 1.12.0-->
<!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.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>TheAlgorithms/C++: sorting/pigeonhole_sort.cpp File Reference</title>
<link rel="icon" href="../../favicon.svg" type="image/x-icon" />
<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="https://cdn.jsdelivr.net/npm/@xpack-3rd-party/doxygen-awesome-css@2.2.0-1/doxygen-awesome-darkmode-toggle.js"></script>
<script type="text/javascript">
DoxygenAwesomeDarkModeToggle.init()
</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="../../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/javascript">
window.MathJax = {
options: {
ignoreHtmlClass: 'tex2jax_ignore',
processHtmlClass: 'tex2jax_process'
},
loader: {
load: ['[tex]/ams']
},
tex: {
macros: {},
packages: ['base','configmacros','ams']
}
};
</script>
<script type="text/javascript" id="MathJax-script" async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"></script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
<link href="../../doxygen-awesome.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="projectlogo"><img alt="Logo" src="../../project_logo.png"/></td>
<td id="projectalign">
<div id="projectname">TheAlgorithms/C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">All the algorithms implemented in C++</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="../../menudata.js"></script>
<script type="text/javascript" src="../../menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('../../',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</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">
$(function(){initNavTree('dd/da8/pigeonhole__sort_8cpp.html','../../',''); });
</script>
<div id="container">
<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="headertitle"><div class="title">pigeonhole_sort.cpp File Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Implementation of [Pigeonhole Sort algorithm] (<a href="https://en.wikipedia.org/wiki/Pigeonhole_sort">https://en.wikipedia.org/wiki/Pigeonhole_sort</a>)
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &lt;algorithm&gt;</code><br />
<code>#include &lt;array&gt;</code><br />
<code>#include &lt;cassert&gt;</code><br />
<code>#include &lt;iostream&gt;</code><br />
</div><div class="textblock"><div class="dynheader">
Include dependency graph for pigeonhole_sort.cpp:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="../../d4/d28/pigeonhole__sort_8cpp__incl.svg" width="344" height="126"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
<p><a href="../../dd/da8/pigeonhole__sort_8cpp_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-namespaces" class="groupheader"><a id="namespaces" name="namespaces"></a>
Namespaces</h2></td></tr>
<tr class="memitem:sorting" id="r_sorting"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d91/namespacesorting.html">sorting</a></td></tr>
<tr class="memdesc:d5/d91/namespacesorting"><td class="mdescLeft">&#160;</td><td class="mdescRight">for working with vectors <br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a0e9e1b21a1684585e9e50f9afe4d53a3" id="r_a0e9e1b21a1684585e9e50f9afe4d53a3"><td class="memTemplParams" colspan="2">template&lt;std::size_t N&gt; </td></tr>
<tr class="memitem:a0e9e1b21a1684585e9e50f9afe4d53a3 template"><td class="memItemLeft" align="right" valign="top">std::array&lt; int, N &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d91/namespacesorting.html#a0e9e1b21a1684585e9e50f9afe4d53a3">sorting::pigeonSort</a> (std::array&lt; int, N &gt; arr)</td></tr>
<tr class="memitem:a34b8683a2b429de5cce57e6d733ec817" id="r_a34b8683a2b429de5cce57e6d733ec817"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a34b8683a2b429de5cce57e6d733ec817">test_1</a> ()</td></tr>
<tr class="memitem:a458410412185a5f09199deaff7157a8d" id="r_a458410412185a5f09199deaff7157a8d"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a458410412185a5f09199deaff7157a8d">test_2</a> ()</td></tr>
<tr class="memitem:af31ec5409537703d9c8a47350386b32a" id="r_af31ec5409537703d9c8a47350386b32a"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af31ec5409537703d9c8a47350386b32a">test_3</a> ()</td></tr>
<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Implementation of [Pigeonhole Sort algorithm] (<a href="https://en.wikipedia.org/wiki/Pigeonhole_sort">https://en.wikipedia.org/wiki/Pigeonhole_sort</a>) </p>
<dl class="section author"><dt>Author</dt><dd><a href="https://github.com/Lownish" target="_blank">Lownish</a></dd></dl>
<p>Pigeonhole sorting is a sorting algorithm that is suitable for sorting lists of elements where the number of elements and the number of possible key values are approximately the same. It requires O(n + Range) time where n is number of elements in input array and Range is number of possible values in array.</p>
<p>The time Complexity of the algorithm is \(O(n+N)\). </p>
<p class="definition">Definition in file <a class="el" href="../../dd/da8/pigeonhole__sort_8cpp_source.html">pigeonhole_sort.cpp</a>.</p>
</div><a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int main </td>
<td>(</td>
<td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Main function </p>
<p class="definition">Definition at line <a class="el" href="../../dd/da8/pigeonhole__sort_8cpp_source.html#l00127">127</a> of file <a class="el" href="../../dd/da8/pigeonhole__sort_8cpp_source.html">pigeonhole_sort.cpp</a>.</p>
<div class="fragment"><div class="line"><span class="lineno"> 127</span> {</div>
<div class="line"><span class="lineno"> 128</span> <a class="code hl_function" href="#a34b8683a2b429de5cce57e6d733ec817">test_1</a>();</div>
<div class="line"><span class="lineno"> 129</span> <a class="code hl_function" href="#a458410412185a5f09199deaff7157a8d">test_2</a>();</div>
<div class="line"><span class="lineno"> 130</span> <a class="code hl_function" href="#af31ec5409537703d9c8a47350386b32a">test_3</a>();</div>
<div class="line"><span class="lineno"> 131</span> </div>
<div class="line"><span class="lineno"> 132</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><span class="lineno"> 133</span>}</div>
<div class="ttc" id="apigeonhole__sort_8cpp_html_a34b8683a2b429de5cce57e6d733ec817"><div class="ttname"><a href="#a34b8683a2b429de5cce57e6d733ec817">test_1</a></div><div class="ttdeci">static void test_1()</div><div class="ttdef"><b>Definition</b> <a href="../../dd/da8/pigeonhole__sort_8cpp_source.html#l00068">pigeonhole_sort.cpp:68</a></div></div>
<div class="ttc" id="apigeonhole__sort_8cpp_html_a458410412185a5f09199deaff7157a8d"><div class="ttname"><a href="#a458410412185a5f09199deaff7157a8d">test_2</a></div><div class="ttdeci">static void test_2()</div><div class="ttdef"><b>Definition</b> <a href="../../dd/da8/pigeonhole__sort_8cpp_source.html#l00088">pigeonhole_sort.cpp:88</a></div></div>
<div class="ttc" id="apigeonhole__sort_8cpp_html_af31ec5409537703d9c8a47350386b32a"><div class="ttname"><a href="#af31ec5409537703d9c8a47350386b32a">test_3</a></div><div class="ttdeci">static void test_3()</div><div class="ttdef"><b>Definition</b> <a href="../../dd/da8/pigeonhole__sort_8cpp_source.html#l00109">pigeonhole_sort.cpp:109</a></div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a34b8683a2b429de5cce57e6d733ec817" name="a34b8683a2b429de5cce57e6d733ec817"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a34b8683a2b429de5cce57e6d733ec817">&#9670;&#160;</a></span>test_1()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void test_1 </td>
<td>(</td>
<td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel static">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Test function 1 with unsorted array {8, 3, 2, 7, 4, 6, 8} </p><dl class="section return"><dt>Returns</dt><dd>none </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../dd/da8/pigeonhole__sort_8cpp_source.html#l00068">68</a> of file <a class="el" href="../../dd/da8/pigeonhole__sort_8cpp_source.html">pigeonhole_sort.cpp</a>.</p>
<div class="fragment"><div class="line"><span class="lineno"> 68</span> {</div>
<div class="line"><span class="lineno"> 69</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n = 7;</div>
<div class="line"><span class="lineno"> 70</span> std::array&lt;int, n&gt; test_array = {8, 3, 2, 7, 4, 6, 8};</div>
<div class="line"><span class="lineno"> 71</span> </div>
<div class="line"><span class="lineno"> 72</span> test_array = <a class="code hl_function" href="../../d5/d91/namespacesorting.html#a0e9e1b21a1684585e9e50f9afe4d53a3">sorting::pigeonSort&lt;n&gt;</a>(test_array);</div>
<div class="line"><span class="lineno"> 73</span> </div>
<div class="line"><span class="lineno"> 74</span> assert(std::is_sorted(std::begin(test_array), std::end(test_array)));</div>
<div class="line"><span class="lineno"> 75</span> </div>
<div class="line"><span class="lineno"> 76</span> <span class="comment">// Printing sorted array</span></div>
<div class="line"><span class="lineno"> 77</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; n; i++) {</div>
<div class="line"><span class="lineno"> 78</span> std::cout &lt;&lt; test_array.at(i) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><span class="lineno"> 79</span> }</div>
<div class="line"><span class="lineno"> 80</span> std::cout &lt;&lt; <span class="stringliteral">&quot;\nPassed\n&quot;</span>;</div>
<div class="line"><span class="lineno"> 81</span>}</div>
<div class="ttc" id="anamespacesorting_html_a0e9e1b21a1684585e9e50f9afe4d53a3"><div class="ttname"><a href="../../d5/d91/namespacesorting.html#a0e9e1b21a1684585e9e50f9afe4d53a3">sorting::pigeonSort</a></div><div class="ttdeci">std::array&lt; int, N &gt; pigeonSort(std::array&lt; int, N &gt; arr)</div><div class="ttdef"><b>Definition</b> <a href="../../dd/da8/pigeonhole__sort_8cpp_source.html#l00034">pigeonhole_sort.cpp:34</a></div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a458410412185a5f09199deaff7157a8d" name="a458410412185a5f09199deaff7157a8d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a458410412185a5f09199deaff7157a8d">&#9670;&#160;</a></span>test_2()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void test_2 </td>
<td>(</td>
<td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel static">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Test function 2 with unsorted array {802, 630, 20, 745, 52, 300, 612, 932, 78, 187} </p><dl class="section return"><dt>Returns</dt><dd>none </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../dd/da8/pigeonhole__sort_8cpp_source.html#l00088">88</a> of file <a class="el" href="../../dd/da8/pigeonhole__sort_8cpp_source.html">pigeonhole_sort.cpp</a>.</p>
<div class="fragment"><div class="line"><span class="lineno"> 88</span> {</div>
<div class="line"><span class="lineno"> 89</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n = 10;</div>
<div class="line"><span class="lineno"> 90</span> std::array&lt;int, n&gt; test_array = {802, 630, 20, 745, 52,</div>
<div class="line"><span class="lineno"> 91</span> 300, 612, 932, 78, 187};</div>
<div class="line"><span class="lineno"> 92</span> </div>
<div class="line"><span class="lineno"> 93</span> test_array = <a class="code hl_function" href="../../d5/d91/namespacesorting.html#a0e9e1b21a1684585e9e50f9afe4d53a3">sorting::pigeonSort&lt;n&gt;</a>(test_array);</div>
<div class="line"><span class="lineno"> 94</span> </div>
<div class="line"><span class="lineno"> 95</span> assert(std::is_sorted(std::begin(test_array), std::end(test_array)));</div>
<div class="line"><span class="lineno"> 96</span> </div>
<div class="line"><span class="lineno"> 97</span> <span class="comment">// Printing sorted array</span></div>
<div class="line"><span class="lineno"> 98</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; n; i++) {</div>
<div class="line"><span class="lineno"> 99</span> std::cout &lt;&lt; test_array.at(i) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><span class="lineno"> 100</span> }</div>
<div class="line"><span class="lineno"> 101</span> std::cout &lt;&lt; <span class="stringliteral">&quot;\nPassed\n&quot;</span>;</div>
<div class="line"><span class="lineno"> 102</span>}</div>
</div><!-- fragment -->
</div>
</div>
<a id="af31ec5409537703d9c8a47350386b32a" name="af31ec5409537703d9c8a47350386b32a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af31ec5409537703d9c8a47350386b32a">&#9670;&#160;</a></span>test_3()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void test_3 </td>
<td>(</td>
<td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel static">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Test function 1 with unsorted array {11,13,12,14} </p><dl class="section return"><dt>Returns</dt><dd>none </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../dd/da8/pigeonhole__sort_8cpp_source.html#l00109">109</a> of file <a class="el" href="../../dd/da8/pigeonhole__sort_8cpp_source.html">pigeonhole_sort.cpp</a>.</p>
<div class="fragment"><div class="line"><span class="lineno"> 109</span> {</div>
<div class="line"><span class="lineno"> 110</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n = 4;</div>
<div class="line"><span class="lineno"> 111</span> std::array&lt;int, n&gt; test_array = {11, 13, 12, 14};</div>
<div class="line"><span class="lineno"> 112</span> </div>
<div class="line"><span class="lineno"> 113</span> test_array = <a class="code hl_function" href="../../d5/d91/namespacesorting.html#a0e9e1b21a1684585e9e50f9afe4d53a3">sorting::pigeonSort&lt;n&gt;</a>(test_array);</div>
<div class="line"><span class="lineno"> 114</span> </div>
<div class="line"><span class="lineno"> 115</span> assert(std::is_sorted(std::begin(test_array), std::end(test_array)));</div>
<div class="line"><span class="lineno"> 116</span> </div>
<div class="line"><span class="lineno"> 117</span> <span class="comment">// Printing sorted array</span></div>
<div class="line"><span class="lineno"> 118</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; n; i++) {</div>
<div class="line"><span class="lineno"> 119</span> std::cout &lt;&lt; test_array.at(i) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><span class="lineno"> 120</span> }</div>
<div class="line"><span class="lineno"> 121</span> std::cout &lt;&lt; <span class="stringliteral">&quot;\nPassed\n&quot;</span>;</div>
<div class="line"><span class="lineno"> 122</span>}</div>
</div><!-- fragment -->
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="../../dir_bb1b521853a9c46347182a9d10420771.html">sorting</a></li><li class="navelem"><a href="../../dd/da8/pigeonhole__sort_8cpp.html">pigeonhole_sort.cpp</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.14.0 </li>
</ul>
</div>
</body>
</html>