Search code examples
mergesortscilab

Merge sort in scilab


I implemented merge sort in scilab with the following code:

   function x = mergesortre (x)
    n = length (x);
    if ( n > 1 ) then
    m = floor (n/2);
    p = n-m;
    x1 = mergesortre ( x(1:m) );
    x2 = mergesortre ( x(m+1:n)  );
    x = merge ( x1 , x2  );
    end
    endfunction
    function [x] = merge ( x1 , x2 )
    n1 = length (x1);
    n2 = length (x2);
    n = n1 + n2;
    x = [];
    i = 1
    j = 1
    k = 1
    while(j<=n1 && k<=n2)
          if x1(j)>=x2(k) 
             x(i)=x2(k);
              k=k+1;
             i=i+1;
    elseif x1(j)<x2(k) 
             x(i)=x1(j);
             j=j+1;
             i=i+1;
    end
    end            
    if (j > n1) then
    x(i+1:n) = x2(k:n2);
    else
    x(i+1:n) = x1(j:n1);
    end
    endfunction
    a=[5,4,3,2,1];
    x=mergesortre(a);
    disp x;

However in when i try to see the sorted array using the terminal window its showing only the first element,for example if my array is [5,4,3,2,1] its only giving output as 1. I need help understanding what i did wrong.


Solution

  • Your error is in the merge function. As i is already incremented at the end of the loop you have to concatenate starting at i:

    if (j > n1) then
        x(i:n) = x2(k:n2);
    else
        x(i:n) = x1(j:n1);
    end