{{Sorting Algorithm}}

Given &nbsp; <code>M</code> &nbsp; as a list of items and another list &nbsp; <code>N</code> &nbsp; of items chosen from &nbsp; <code>M</code>, &nbsp; create &nbsp; <code>M'</code> &nbsp; as a list with the ''first'' occurrences of items from &nbsp; N &nbsp; sorted to be in one of the set of indices of their original occurrence in &nbsp; <code>M</code> &nbsp; but in the order given by their order in &nbsp;  <code>N</code>. 

That is, items in &nbsp; <code>N</code> &nbsp; are taken from &nbsp; <code>M</code> &nbsp; without replacement, then the corresponding positions in &nbsp; <code>M'</code> &nbsp; are filled by successive items from &nbsp; <code>N</code>.


;For example:
:if &nbsp; <code>M</code> &nbsp; is &nbsp; <code>'the cat sat on the mat'</code>
:And &nbsp; <code>N</code> &nbsp; is &nbsp; <code>'mat cat'</code> 
:Then the result &nbsp; <code>M'</code> &nbsp; is &nbsp; <code>'the mat sat on the cat'</code>. 

The words not in &nbsp; <code>N</code> &nbsp; are left in their original positions.


If there are duplications then only the first instances in &nbsp; <code>M</code> &nbsp; up to as many as are mentioned in &nbsp; <code>N</code> &nbsp; are potentially re-ordered.


;For example:
: <code> M = 'A B C A B C A B C' </code>
: <code> N = 'C A C A'           </code>

Is ordered as:
:<code> M' = 'C B A C B A A B C' </code>

<br>
Show the output, here, for at least the following inputs:
<pre>
Data M: 'the cat sat on the mat' Order N: 'mat cat'
Data M: 'the cat sat on the mat' Order N: 'cat mat'
Data M: 'A B C A B C A B C'      Order N: 'C A C A'
Data M: 'A B C A B D A B E'      Order N: 'E A D A'
Data M: 'A B'                    Order N: 'B'      
Data M: 'A B'                    Order N: 'B A'    
Data M: 'A B B A'                Order N: 'B A'
</pre>


;Cf:
* [[Sort disjoint sublist]]
<br><br>

