function C = Crossover(M)
%  C = Crossover(M)
%This program is the crossover operator of a simple genetic algorithm that
%uses a single point crossover.  The input matrix M (mating pool) has rows
%consisting of the current population's mating pool, assumed even in
%number, and given in binary code.  For each adjacent pair of rows 2i-1,
%and 2i, a random point of splicing is selected (between 1 and k-1, where k
%is the length of the string), and the tails of the two strings are
%interchanged after this splice point.  The resulting two strings represent
%the corresponding two offspring to be placed in the corresponding rows of
%the output matrix M.  
[n s] = size(M);
for i=1:n/2
    c = ceil((s-1)*rand);
    C(2*i-1,:)=[M(2*i-1,1:c) M(2*i,(c+1):s)];
    C(2*i,:)  =[M(2*i,1:c) M(2*i-1,(c+1):s)];
end