
Sorting Algorithm

This is a sorting algorithm.   It may be applied to a set of data in order to sort it.    
For comparing various sorts, see compare sorts.  
For other sorting algorithms,   see sorting algorithms,   or:

O(n logn) sorts
Heap sort |
Merge sort |
Patience sort |
Quick sort
O(n log2n) sorts
Shell Sort
O(n2) sorts
Bubble sort |
Cocktail sort |
Cocktail sort with shifting bounds |
Comb sort |
Cycle sort |
Gnome sort |
Insertion sort |
Selection sort |
Strand sort
other sorts
Bead sort |
Bogo sort |
Common sorted list |
Composite structures sort |
Custom comparator sort |
Counting sort |
Disjoint sublist sort |
External sort |
Jort sort |
Lexicographical sort |
Natural sorting |
Order by pair comparisons |
Order disjoint list items |
Order two numerical lists |
Object identifier (OID) sort |
Pancake sort |
Quickselect |
Permutation sort |
Radix sort |
Ranking methods |
Remove duplicate elements |
Sleep sort |
Stooge sort |
[Sort letters of a string] |
Three variable sort |
Topological sort |
Tree sort


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

That is, items in   N   are taken from   M   without replacement, then the corresponding positions in   M'   are filled by successive items from   N.



For example

if   M   is   'the cat sat on the mat'
And   N   is   'mat cat' 
Then the result   M'   is   'the mat sat on the cat'. 
The words not in   N   are left in their original positions.



If there are duplications then only the first instances in   M   up to as many as are mentioned in   N   are potentially re-ordered.



For example

  M = 'A B C A B C A B C' 
  N = 'C A C A' 
Is ordered as:

 M' = 'C B A C B A A B C' 


Show the output, here, for at least the following inputs:

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'



Cf

 Sort disjoint sublist


 
function sublistsort($M, $N) {
    $arr = $M.Split(' ')
    $array = $N.Split(' ') | group
    $Count = @($array |foreach {$_.Count})
    $ip, $i = @(), 0
    $arr | foreach{ 
        $name = "$_"
        $j = $array.Name.IndexOf($name)
        if($j -gt -1){
            $k = $Count[$j] - 1
            if($k -ge 0) {
                $ip += @($i)
                $Count[$j] = $k
            }
        }
        $i++
    }
    $i = 0
    $N.Split(' ') | foreach{ $arr[$ip[$i++]] = "$_"}
    [pscustomobject]@{
        "M" = "$M "
        "N" = "$N "
        "M'" = "$($arr)"
    } 
}
$M1 = 'the cat sat on the mat'
$N1 =  'mat cat'
$M2 = 'the cat sat on the mat' 
$N2 = 'cat mat'
$M3 = 'A B C A B C A B C'      
$N3 = 'C A C A'
$M4 = 'A B C A B D A B E'      
$N4 = 'E A D A'
$M5 = 'A B'                    
$N5 = 'B'     
$M6 = 'A B'                   
$N6 = 'B A'   
$M7 = 'A B B A'                
$N7 = 'B A'
sublistsort $M1 $N1
sublistsort $M2 $N2
sublistsort $M3 $N3
sublistsort $M4 $N4
sublistsort $M5 $N5
sublistsort $M6 $N6
sublistsort $M7 $N7
 