Three way partitioning of an array around a given range using Python

Given an array and the range of the array [startval, endval]. Array is divided by three parts.

  • All elements smaller than startval come first.

  • All elements in range startval to endval come next.

  • All elements greater than endval appear in the end.

Let?s say we have the following input ?

<span class="pln">A </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">14</span><span class="pun">,</span><span class="pln"> </span><span class="lit">51</span><span class="pun">,</span><span class="pln"> </span><span class="lit">12</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">54</span><span class="pun">,</span><span class="pln"> </span><span class="lit">20</span><span class="pun">,</span><span class="pln"> </span><span class="lit">87</span><span class="pun">,</span><span class="pln"> </span><span class="lit">98</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">32</span><span class="pun">]</span><span class="pln">
startval </span><span class="pun">=</span><span class="pln"> </span><span class="lit">14</span><span class="pun">,</span><span class="pln"> endval </span><span class="pun">=</span><span class="pln"> </span><span class="lit">54</span>

The output should be ?

A = [1, 12, 4, 2, 3, 1, 14, 51, 20, 32,54, 87, 98]

Three-way partitioning of an array around a given range with List Comprehension

In this example, we will see how to three-way partition an array around a given range ?

Example

<div class="execute"></div><div class="code-mirror  language-python" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;"><span class="token keyword">def</span> <span class="token function">partition_array</span><span class="token punctuation">(</span><span class="token builtin">input</span><span class="token punctuation">,</span> lowVal<span class="token punctuation">,</span> highVal<span class="token punctuation">)</span><span class="token punctuation">:</span>
	<span class="token comment"># Separate input list in three parts</span>
	my_first <span class="token operator">=</span> <span class="token punctuation">[</span> num <span class="token keyword">for</span> num <span class="token keyword">in</span> <span class="token builtin">input</span> <span class="token keyword">if</span> num<span class="token operator"><</span>lowVal <span class="token punctuation">]</span>
	my_second <span class="token operator">=</span> <span class="token punctuation">[</span> num <span class="token keyword">for</span> num <span class="token keyword">in</span> <span class="token builtin">input</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>num<span class="token operator">>=</span>lowVal <span class="token keyword">and</span> num<span class="token operator"><=</span>highVal<span class="token punctuation">)</span> <span class="token punctuation">]</span>
	my_third <span class="token operator">=</span> <span class="token punctuation">[</span> num <span class="token keyword">for</span> num <span class="token keyword">in</span> <span class="token builtin">input</span> <span class="token keyword">if</span> num<span class="token operator">></span>highVal <span class="token punctuation">]</span>
	<span class="token comment"># Concatenate all the three parts</span>
	<span class="token keyword">print</span><span class="token punctuation">(</span>my_first <span class="token operator">+</span> my_second <span class="token operator">+</span> my_third<span class="token punctuation">)</span>

<span class="token comment"># Driver program</span>
<span class="token keyword">if</span> __name__ <span class="token operator">==</span> <span class="token string">"__main__"</span><span class="token punctuation">:</span>
	my_input <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">140</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">40</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">,</span> <span class="token number">540</span><span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">870</span><span class="token punctuation">,</span> <span class="token number">980</span><span class="token punctuation">,</span> <span class="token number">30</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">320</span><span class="token punctuation">]</span>
	my_lowVal <span class="token operator">=</span> <span class="token number">140</span>
	my_highVal <span class="token operator">=</span> <span class="token number">200</span>
	partition_array<span class="token punctuation">(</span>my_input<span class="token punctuation">,</span> my_lowVal<span class="token punctuation">,</span> my_highVal<span class="token punctuation">)</span>
</div><div class="output-wrapper"><div class="console-close"></div><div class="code-output"></div></div>

Output

[10, 50, 40, 20, 30, 10, 140, 200, 200, 540, 870, 980, 320]

Three-way partitioning of an array around a given range with while loop

In this example, we will see how to three-way partition an array around a given range with while loop ?

Example

<div class="execute"></div><div class="code-mirror  language-python" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;"><span class="token keyword">def</span> <span class="token function">partitionFunc</span><span class="token punctuation">(</span>my_input<span class="token punctuation">,</span> n<span class="token punctuation">,</span> lowVal<span class="token punctuation">,</span> highVal<span class="token punctuation">)</span><span class="token punctuation">:</span>
	begn <span class="token operator">=</span> <span class="token number">0</span>
	end <span class="token operator">=</span> n <span class="token operator">-</span> <span class="token number">1</span>
	i <span class="token operator">=</span> <span class="token number">0</span>

	<span class="token comment"># Looping</span>
	<span class="token keyword">while</span> i <span class="token operator"><=</span> end<span class="token punctuation">:</span>
		<span class="token keyword">if</span> my_input<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator"><</span> lowVal<span class="token punctuation">:</span>
			my_input<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> my_input<span class="token punctuation">[</span>begn<span class="token punctuation">]</span> <span class="token operator">=</span> my_input<span class="token punctuation">[</span>begn<span class="token punctuation">]</span><span class="token punctuation">,</span> my_input<span class="token punctuation">[</span>i<span class="token punctuation">]</span>
			i <span class="token operator">+=</span> <span class="token number">1</span>
			begn <span class="token operator">+=</span> <span class="token number">1</span>

		<span class="token keyword">elif</span> my_input<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">></span> highVal<span class="token punctuation">:</span>
			my_input<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> my_input<span class="token punctuation">[</span>end<span class="token punctuation">]</span> <span class="token operator">=</span> my_input<span class="token punctuation">[</span>end<span class="token punctuation">]</span><span class="token punctuation">,</span> my_input<span class="token punctuation">[</span>i<span class="token punctuation">]</span>
			end <span class="token operator">-=</span> <span class="token number">1</span>
		<span class="token keyword">else</span><span class="token punctuation">:</span>
			i<span class="token operator">+=</span><span class="token number">1</span>

<span class="token comment"># Driver code</span>
<span class="token keyword">if</span> __name__ <span class="token operator">==</span> <span class="token string">"__main__"</span><span class="token punctuation">:</span>
	my_input <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">14</span><span class="token punctuation">,</span> <span class="token number">51</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">54</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">,</span> <span class="token number">87</span><span class="token punctuation">,</span> <span class="token number">98</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">32</span><span class="token punctuation">]</span>
	n <span class="token operator">=</span> <span class="token builtin">len</span><span class="token punctuation">(</span>my_input<span class="token punctuation">)</span>

	partitionFunc<span class="token punctuation">(</span>my_input<span class="token punctuation">,</span> n<span class="token punctuation">,</span> <span class="token number">14</span><span class="token punctuation">,</span> <span class="token number">54</span><span class="token punctuation">)</span>

	<span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">:</span>
		<span class="token keyword">print</span><span class="token punctuation">(</span>my_input<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> end <span class="token operator">=</span> <span class="token string">" "</span><span class="token punctuation">)</span>
</div><div class="output-wrapper"><div class="console-close"></div><div class="code-output"></div></div>

Output

1 12 4 2 1 3 54 20 32 51 14 98 87 
Updated on: 2022-08-12T14:36:50+05:30

416 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements