Documentation for f1eddf4d65

This commit is contained in:
realstealthninja
2025-07-09 10:53:16 +00:00
parent e7edde96ab
commit b41207008f
2497 changed files with 31270 additions and 40283 deletions

View File

@@ -4,7 +4,7 @@
<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.13.2"/>
<meta name="generator" content="Doxygen 1.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>TheAlgorithms/C++: sorting/count_inversions.cpp File Reference</title>
<link rel="icon" href="../../favicon.svg" type="image/x-icon" />
@@ -19,7 +19,6 @@
<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>
@@ -60,26 +59,20 @@ window.MathJax = {
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<!-- Generated by Doxygen 1.14.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
$(function() { codefold.init(); });
</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&amp;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 -->
@@ -94,10 +87,9 @@ $(function() {
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d2/d26/count__inversions_8cpp.html','../../'); initResizable(true); });
/* @license-end */
$(function(){initNavTree('d2/d26/count__inversions_8cpp.html','../../',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
@@ -121,9 +113,6 @@ $(function(){initNavTree('d2/d26/count__inversions_8cpp.html','../../'); initRes
</div>
<div class="header">
<div class="summary">
<a href="#namespaces">Namespaces</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle"><div class="title">count_inversions.cpp File Reference</div></div>
</div><!--header-->
<div class="contents">
@@ -137,57 +126,49 @@ $(function(){initNavTree('d2/d26/count__inversions_8cpp.html','../../'); initRes
</div><div class="textblock"><div class="dynheader">
Include dependency graph for count_inversions.cpp:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="../../db/d6c/count__inversions_8cpp__incl.svg" width="336" height="111"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="../../db/d6c/count__inversions_8cpp__incl.svg" width="336" 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/d26/count__inversions_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>
<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:"><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="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>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d13/namespaceinversion.html">inversion</a></td></tr>
<tr class="memitem:inversion" id="r_inversion"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d13/namespaceinversion.html">inversion</a></td></tr>
<tr class="memdesc:d9/d13/namespaceinversion"><td class="mdescLeft">&#160;</td><td class="mdescRight">Functions for counting inversions using Merge Sort algorithm. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
<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:aad643c14734394e784a75169cb58132f" id="r_aad643c14734394e784a75169cb58132f"><td class="memTemplParams" colspan="2">template&lt;typename T&gt; </td></tr>
<tr class="memitem:aad643c14734394e784a75169cb58132f"><td class="memTemplItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#aad643c14734394e784a75169cb58132f">sorting::inversion::merge</a> (T *arr, T *temp, uint32_t left, uint32_t mid, uint32_t right)</td></tr>
<tr class="memitem:aad643c14734394e784a75169cb58132f template"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aad643c14734394e784a75169cb58132f">sorting::inversion::merge</a> (T *arr, T *temp, uint32_t left, uint32_t mid, uint32_t right)</td></tr>
<tr class="memdesc:aad643c14734394e784a75169cb58132f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function to merge two sub-arrays. <br /></td></tr>
<tr class="separator:aad643c14734394e784a75169cb58132f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae97a486e14101c4822ea8dc47f0d1661" id="r_ae97a486e14101c4822ea8dc47f0d1661"><td class="memTemplParams" colspan="2">template&lt;typename T&gt; </td></tr>
<tr class="memitem:ae97a486e14101c4822ea8dc47f0d1661"><td class="memTemplItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#ae97a486e14101c4822ea8dc47f0d1661">sorting::inversion::mergeSort</a> (T *arr, T *temp, uint32_t left, uint32_t right)</td></tr>
<tr class="memitem:ae97a486e14101c4822ea8dc47f0d1661 template"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae97a486e14101c4822ea8dc47f0d1661">sorting::inversion::mergeSort</a> (T *arr, T *temp, uint32_t left, uint32_t right)</td></tr>
<tr class="memdesc:ae97a486e14101c4822ea8dc47f0d1661"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implement merge Sort and count inverions while merging. <br /></td></tr>
<tr class="separator:ae97a486e14101c4822ea8dc47f0d1661"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3332498eabf6579ef059c0d0e9f4ec80" id="r_a3332498eabf6579ef059c0d0e9f4ec80"><td class="memTemplParams" colspan="2">template&lt;class T&gt; </td></tr>
<tr class="memitem:a3332498eabf6579ef059c0d0e9f4ec80"><td class="memTemplItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a3332498eabf6579ef059c0d0e9f4ec80">sorting::inversion::countInversion</a> (T *arr, const uint32_t size)</td></tr>
<tr class="memitem:a3332498eabf6579ef059c0d0e9f4ec80 template"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a3332498eabf6579ef059c0d0e9f4ec80">sorting::inversion::countInversion</a> (T *arr, const uint32_t size)</td></tr>
<tr class="memdesc:a3332498eabf6579ef059c0d0e9f4ec80"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function <a class="el" href="#a3332498eabf6579ef059c0d0e9f4ec80" title="Function countInversion() returns the number of inversion present in the input array....">countInversion()</a> returns the number of inversion present in the input array. Inversions are an estimate of how close or far off the array is to being sorted. <br /></td></tr>
<tr class="separator:a3332498eabf6579ef059c0d0e9f4ec80"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a851ca6a0391d14fb49a97d55e4377497" id="r_a851ca6a0391d14fb49a97d55e4377497"><td class="memTemplParams" colspan="2">template&lt;typename T&gt; </td></tr>
<tr class="memitem:a851ca6a0391d14fb49a97d55e4377497"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a851ca6a0391d14fb49a97d55e4377497">sorting::inversion::show</a> (T *arr, const uint32_t array_size)</td></tr>
<tr class="memitem:a851ca6a0391d14fb49a97d55e4377497 template"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a851ca6a0391d14fb49a97d55e4377497">sorting::inversion::show</a> (T *arr, const uint32_t array_size)</td></tr>
<tr class="memdesc:a851ca6a0391d14fb49a97d55e4377497"><td class="mdescLeft">&#160;</td><td class="mdescRight">UTILITY function to print array. <br /></td></tr>
<tr class="separator:a851ca6a0391d14fb49a97d55e4377497"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa8dca7b867074164d5f45b0f3851269d" id="r_aa8dca7b867074164d5f45b0f3851269d"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa8dca7b867074164d5f45b0f3851269d">test</a> ()</td></tr>
<tr class="memdesc:aa8dca7b867074164d5f45b0f3851269d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Test implementations. <br /></td></tr>
<tr class="separator:aa8dca7b867074164d5f45b0f3851269d"><td class="memSeparator" colspan="2">&#160;</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>
<tr class="memdesc:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Program Body contains all main funtionality. <br /></td></tr>
<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Counting Inversions using <a href="https://en.wikipedia.org/wiki/Merge_sort" target="_blank">Merge Sort</a> </p>
<p>Program to count the number of inversions in an array using merge-sort.</p>
<p>The count of inversions help to determine how close the array is to be sorted in ASCENDING order.</p>
<p>two elements a[i] and a[j] form an inversion if <code>a[i]</code> &gt; <code>a[j]</code> and i &lt; j</p>
<p>Time Complexity --&gt; <code>O(n.log n)</code></p>
<p>Space Complexity --&gt; <code>O(n)</code> ; additional array <code>temp[1..n]</code> </p>
<h3><a class="anchor" id="autotoc_md115"></a>
<p>two elements a[i] and a[j] form an inversion if <span class="tt">a[i]</span> &gt; <span class="tt">a[j]</span> and i &lt; j</p>
<p>Time Complexity --&gt; <span class="tt">O(n.log n)</span></p>
<p>Space Complexity --&gt; <span class="tt">O(n)</span> ; additional array <span class="tt">temp[1..n]</span> </p>
<h3 class="doxsection"><a class="anchor" id="autotoc_md115"></a>
Algorithm</h3>
<ol type="1">
<li>The idea is similar to merge sort, divide the array into two equal or almost equal halves in each step until the base case is reached.</li>
<li>Create a function merge that counts the number of inversions when two halves of the array are merged, create two indices i and j, i is the index for first half and j is an index of the second half. if <code>a[i]</code> is greater than <code>a[j]</code>, then there are (mid i) inversions, Because left and right subarrays are sorted, so all the remaining elements in left-subarray (a[i+1], a[i+2] … a[mid]) will be greater than a[j].</li>
<li>Create a function merge that counts the number of inversions when two halves of the array are merged, create two indices i and j, i is the index for first half and j is an index of the second half. if <span class="tt">a[i]</span> is greater than <span class="tt">a[j]</span>, then there are (mid i) inversions, Because left and right subarrays are sorted, so all the remaining elements in left-subarray (a[i+1], a[i+2] … a[mid]) will be greater than a[j].</li>
<li>Create a recursive function to divide the array into halves and find the answer by summing the number of inversions is the first half, number of inversion in the second half and the number of inversions by merging the two.</li>
<li>The base case of recursion is when there is only one element in the given half.</li>
<li>Print the answer</li>
@@ -195,7 +176,7 @@ Algorithm</h3>
<dl class="section author"><dt>Author</dt><dd><a href="https://github.com/rakshitraj" target="_blank">Rakshit Raj</a> </dd></dl>
<p class="definition">Definition in file <a class="el" href="../../d2/d26/count__inversions_8cpp_source.html">count_inversions.cpp</a>.</p>
</div><h2 class="groupheader">Function Documentation</h2>
</div><a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
<a id="a3332498eabf6579ef059c0d0e9f4ec80" name="a3332498eabf6579ef059c0d0e9f4ec80"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3332498eabf6579ef059c0d0e9f4ec80">&#9670;&#160;</a></span>countInversion()</h2>
@@ -311,9 +292,9 @@ template&lt;typename T&gt; </div>
<table class="params">
<tr><td class="paramname">arr</td><td>input array, data-menber of vector </td></tr>
<tr><td class="paramname">temp</td><td>stores the resultant merged array </td></tr>
<tr><td class="paramname">left</td><td>lower bound of <code>arr[]</code> and left-sub-array </td></tr>
<tr><td class="paramname">mid</td><td>midpoint, upper bound of left sub-array, <code>(mid+1)</code> gives the lower bound of right-sub-array </td></tr>
<tr><td class="paramname">right</td><td>upper bound of <code>arr[]</code> and right-sub-array </td></tr>
<tr><td class="paramname">left</td><td>lower bound of <span class="tt">arr[]</span> and left-sub-array </td></tr>
<tr><td class="paramname">mid</td><td>midpoint, upper bound of left sub-array, <span class="tt">(mid+1)</span> gives the lower bound of right-sub-array </td></tr>
<tr><td class="paramname">right</td><td>upper bound of <span class="tt">arr[]</span> and right-sub-array </td></tr>
</table>
</dd>
</dl>
@@ -468,7 +449,7 @@ template&lt;typename T&gt; </div>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void test </td>
<td class="memname">void test </td>
<td>(</td>
<td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
<td></td>
@@ -524,11 +505,19 @@ template&lt;typename T&gt; </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 class="el" href="../../dir_bb1b521853a9c46347182a9d10420771.html">sorting</a></li><li class="navelem"><a class="el" href="../../d2/d26/count__inversions_8cpp.html">count_inversions.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.13.2 </li>
<li class="navelem"><a href="../../dir_bb1b521853a9c46347182a9d10420771.html">sorting</a></li><li class="navelem"><a href="../../d2/d26/count__inversions_8cpp.html">count_inversions.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>