Bug #8101: The median function did not return the good result if the first argument...
[scilab.git] / scilab / modules / elementary_functions / macros / %sp_gsort.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab\r
2 // Copyright (C) DIGITEO - 2009 - Allan CORNET\r
3 // Copyrifht (C) 2012 - Scilab Enterprises - Adeline CARNIS\r
4 // \r
5 // This file must be used under the terms of the CeCILL.\r
6 // This source file is licensed as described in the file COPYING, which\r
7 // you should have received as part of this distribution.  The terms\r
8 // are also available at    \r
9 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt\r
10 \r
11 function A = %sp_gsort(A, optsort, directionsort)\r
12     [ij, v, mn] = spget(A);\r
13 \r
14     if mn(1) <> 1 & mn(2) <> 1 then\r
15         error(999,msprintf(_("%s: Wrong size for input argument #%d: sparse vectors expected.\n"),'gsort',1));\r
16     end\r
17 \r
18     if (strcmp(optsort, 'c')) == 0 | v == [] then\r
19         A = A;\r
20     else\r
21         if mn(2) == 1 then\r
22             dif = mn(1) - length(v);\r
23             v = gsort(v, optsort, directionsort);\r
24         elseif mn(1) == 1 then\r
25             dif = mn(2) - length(v);\r
26             v = gsort(v, optsort, directionsort);\r
27         end\r
28 \r
29         last = find(v<0);\r
30         first = find(v>0);\r
31 \r
32         if last == [] & first <> [] then\r
33             if strcmp(directionsort, 'i')== 0 then\r
34                 ij(:,1) = first(:) + dif;\r
35             else\r
36                 ij(:,1) = first(:);\r
37             end\r
38         elseif first == [] & last <> [] then\r
39             ij(:,1) = last(:) + dif;\r
40         else\r
41             if strcmp(directionsort, 'i')== 0 then\r
42                 ij(:,1) = [last(:); first(:) + dif];\r
43             else\r
44                 ij(:,1) = [first(:); last(:) + dif];\r
45             end\r
46         end\r
47 \r
48         A = sparse(ij, v, mn)\r
49     end\r
50 endfunction\r
51 \r\r