mirror of
https://github.com/TheAlgorithms/C-Plus-Plus.git
synced 2026-03-21 20:31:43 +08:00
280 lines
18 KiB
HTML
280 lines
18 KiB
HTML
<!-- 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.12.0"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>TheAlgorithms/C++: sorting/gnome_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="../../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/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"> 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.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('d2/d21/gnome__sort_8cpp.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="#namespaces">Namespaces</a> |
|
|
<a href="#func-members">Functions</a> </div>
|
|
<div class="headertitle"><div class="title">gnome_sort.cpp File Reference</div></div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
|
|
<p>Implementation of <a href="https://en.wikipedia.org/wiki/Gnome_sort" target="_blank">gnome sort</a> algorithm.
|
|
<a href="#details">More...</a></p>
|
|
<div class="textblock"><code>#include <algorithm></code><br />
|
|
<code>#include <array></code><br />
|
|
<code>#include <cassert></code><br />
|
|
<code>#include <iostream></code><br />
|
|
</div><div class="textblock"><div class="dynheader">
|
|
Include dependency graph for gnome_sort.cpp:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d9/d4e/gnome__sort_8cpp__incl.svg" width="344" height="111"><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="../../d2/d21/gnome__sort_8cpp_source.html">Go to the source code of this file.</a></p>
|
|
<table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
|
|
Namespaces</h2></td></tr>
|
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">namespace  </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"> </td><td class="mdescRight">for working with vectors <br /></td></tr>
|
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table><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: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="../../d5/d91/namespacesorting.html#a2f8bc626eb57acae24a94636a23af6a1">sorting::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">std::array< T, size > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="../../d5/d91/namespacesorting.html#aa3677f87b5b4756bc77e9e34c5f27935">sorting::gnomeSort</a> (std::array< T, size > arr)</td></tr>
|
|
<tr class="separator:aa3677f87b5b4756bc77e9e34c5f27935"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:aa8dca7b867074164d5f45b0f3851269d" id="r_aa8dca7b867074164d5f45b0f3851269d"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="#aa8dca7b867074164d5f45b0f3851269d">test</a> ()</td></tr>
|
|
<tr class="separator:aa8dca7b867074164d5f45b0f3851269d"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
|
|
<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table>
|
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
|
<div class="textblock"><p>Implementation of <a href="https://en.wikipedia.org/wiki/Gnome_sort" target="_blank">gnome sort</a> algorithm. </p>
|
|
<dl class="section author"><dt>Author</dt><dd><a href="https://github.com/beqakd" target="_blank">beqakd</a> </dd>
|
|
<dd>
|
|
<a href="https://github.com/kvedala" target="_blank">Krishna Vedala</a></dd></dl>
|
|
<p>Gnome sort algorithm is not the best one but it is widely used. The algorithm iteratively checks the order of pairs in the array. If they are on right order it moves to the next successive pair, otherwise it swaps elements. This operation is repeated until no more swaps are made thus indicating the values to be in ascending order.</p>
|
|
<p>The time Complexity of the algorithm is \(O(n^2)\) and in some cases it can be \(O(n)\). </p>
|
|
|
|
<p class="definition">Definition in file <a class="el" href="../../d2/d21/gnome__sort_8cpp_source.html">gnome_sort.cpp</a>.</p>
|
|
</div><h2 class="groupheader">Function Documentation</h2>
|
|
<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">◆ </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>Our main function with example of sort method. </p>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="../../d2/d21/gnome__sort_8cpp_source.html#l00130">130</a> of file <a class="el" href="../../d2/d21/gnome__sort_8cpp_source.html">gnome_sort.cpp</a>.</p>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 130</span> {</div>
|
|
<div class="line"><span class="lineno"> 131</span> <a class="code hl_function" href="#aa8dca7b867074164d5f45b0f3851269d">test</a>();</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="agnome__sort_8cpp_html_aa8dca7b867074164d5f45b0f3851269d"><div class="ttname"><a href="#aa8dca7b867074164d5f45b0f3851269d">test</a></div><div class="ttdeci">static void test()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/d21/gnome__sort_8cpp_source.html#l00085">gnome_sort.cpp:85</a></div></div>
|
|
</div><!-- fragment -->
|
|
</div>
|
|
</div>
|
|
<a id="aa8dca7b867074164d5f45b0f3851269d" name="aa8dca7b867074164d5f45b0f3851269d"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#aa8dca7b867074164d5f45b0f3851269d">◆ </a></span>test()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">static void test </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</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
<p>Test function </p>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="../../d2/d21/gnome__sort_8cpp_source.html#l00085">85</a> of file <a class="el" href="../../d2/d21/gnome__sort_8cpp_source.html">gnome_sort.cpp</a>.</p>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 85</span> {</div>
|
|
<div class="line"><span class="lineno"> 86</span> <span class="comment">// Example 1. Creating array of int,</span></div>
|
|
<div class="line"><span class="lineno"> 87</span> std::cout << <span class="stringliteral">"Test 1 - as a C-array..."</span>;</div>
|
|
<div class="line"><span class="lineno"> 88</span> <span class="keyword">const</span> <span class="keywordtype">int</span> size = 6;</div>
|
|
<div class="line"><span class="lineno"> 89</span> std::array<int, size> arr = {-22, 100, 150, 35, -10, 99};</div>
|
|
<div class="line"><span class="lineno"> 90</span> <a class="code hl_function" href="../../d5/d91/namespacesorting.html#a2f8bc626eb57acae24a94636a23af6a1">sorting::gnomeSort</a>(arr.data(),</div>
|
|
<div class="line"><span class="lineno"> 91</span> size); <span class="comment">// pass array data as a C-style array pointer</span></div>
|
|
<div class="line"><span class="lineno"> 92</span> assert(std::is_sorted(std::begin(arr), std::end(arr)));</div>
|
|
<div class="line"><span class="lineno"> 93</span> std::cout << <span class="stringliteral">" Passed\n"</span>;</div>
|
|
<div class="line"><span class="lineno"> 94</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < size; i++) {</div>
|
|
<div class="line"><span class="lineno"> 95</span> std::cout << arr[i] << <span class="stringliteral">", "</span>;</div>
|
|
<div class="line"><span class="lineno"> 96</span> }</div>
|
|
<div class="line"><span class="lineno"> 97</span> std::cout << std::endl;</div>
|
|
<div class="line"><span class="lineno"> 98</span> </div>
|
|
<div class="line"><span class="lineno"> 99</span> <span class="comment">// Example 2. Creating array of doubles.</span></div>
|
|
<div class="line"><span class="lineno"> 100</span> std::cout << <span class="stringliteral">"\nTest 2 - as a std::array..."</span>;</div>
|
|
<div class="line"><span class="lineno"> 101</span> std::array<double, size> double_arr = {-100.2, 10.2, 20.0, 9.0, 7.5, 7.2};</div>
|
|
<div class="line"><span class="lineno"> 102</span> std::array<double, size> sorted_arr = <a class="code hl_function" href="../../d5/d91/namespacesorting.html#a2f8bc626eb57acae24a94636a23af6a1">sorting::gnomeSort</a>(double_arr);</div>
|
|
<div class="line"><span class="lineno"> 103</span> assert(std::is_sorted(std::begin(sorted_arr), std::end(sorted_arr)));</div>
|
|
<div class="line"><span class="lineno"> 104</span> std::cout << <span class="stringliteral">" Passed\n"</span>;</div>
|
|
<div class="line"><span class="lineno"> 105</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < size; i++) {</div>
|
|
<div class="line"><span class="lineno"> 106</span> std::cout << double_arr[i] << <span class="stringliteral">", "</span>;</div>
|
|
<div class="line"><span class="lineno"> 107</span> }</div>
|
|
<div class="line"><span class="lineno"> 108</span> std::cout << std::endl;</div>
|
|
<div class="line"><span class="lineno"> 109</span> </div>
|
|
<div class="line"><span class="lineno"> 110</span> <span class="comment">// Example 3. Creating random array of float.</span></div>
|
|
<div class="line"><span class="lineno"> 111</span> std::cout << <span class="stringliteral">"\nTest 3 - 200 random numbers as a std::array..."</span>;</div>
|
|
<div class="line"><span class="lineno"> 112</span> <span class="keyword">const</span> <span class="keywordtype">int</span> size2 = 200;</div>
|
|
<div class="line"><span class="lineno"> 113</span> std::array<float, size2> rand_arr{};</div>
|
|
<div class="line"><span class="lineno"> 114</span> </div>
|
|
<div class="line"><span class="lineno"> 115</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> &a : rand_arr) {</div>
|
|
<div class="line"><span class="lineno"> 116</span> <span class="comment">// generate random numbers between -5.0 and 4.99</span></div>
|
|
<div class="line"><span class="lineno"> 117</span> a = float(std::rand() % 1000 - 500) / 100.f;</div>
|
|
<div class="line"><span class="lineno"> 118</span> }</div>
|
|
<div class="line"><span class="lineno"> 119</span> </div>
|
|
<div class="line"><span class="lineno"> 120</span> std::array<float, size2> float_arr = <a class="code hl_function" href="../../d5/d91/namespacesorting.html#a2f8bc626eb57acae24a94636a23af6a1">sorting::gnomeSort</a>(rand_arr);</div>
|
|
<div class="line"><span class="lineno"> 121</span> assert(std::is_sorted(std::begin(float_arr), std::end(float_arr)));</div>
|
|
<div class="line"><span class="lineno"> 122</span> std::cout << <span class="stringliteral">" Passed\n"</span>;</div>
|
|
<div class="line"><span class="lineno"> 123</span> <span class="comment">// for (int i = 0; i < size; i++) std::cout << double_arr[i] << ", ";</span></div>
|
|
<div class="line"><span class="lineno"> 124</span> std::cout << std::endl;</div>
|
|
<div class="line"><span class="lineno"> 125</span>}</div>
|
|
<div class="ttc" id="anamespacesorting_html_a2f8bc626eb57acae24a94636a23af6a1"><div class="ttname"><a href="../../d5/d91/namespacesorting.html#a2f8bc626eb57acae24a94636a23af6a1">sorting::gnomeSort</a></div><div class="ttdeci">void gnomeSort(T *arr, int size)</div><div class="ttdef"><b>Definition</b> <a href="../../d2/d21/gnome__sort_8cpp_source.html#l00034">gnome_sort.cpp:34</a></div></div>
|
|
</div><!-- fragment -->
|
|
</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="../../dir_bb1b521853a9c46347182a9d10420771.html">sorting</a></li><li class="navelem"><a class="el" href="../../d2/d21/gnome__sort_8cpp.html">gnome_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.12.0 </li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|