help-octave
[Top][All Lists]

## Re: Sorting of words

 From: etienne grossmann Subject: Re: Sorting of words Date: Fri, 25 Feb 2000 18:08:34 +0000 (WET)

```  Hello,

> I use Octave 2.0.16 and I have the following problem. I want to sort
> alphabetically the words: "apple", "dog", "long". I tried with SORT
> function without success. How can I solve this problem?

If there is no better way, this should do :

octave:26> a = ["axy";"along";"apple";"app"] ;
octave:27> setstr( lexicosort(toascii(a)) )
ans =

along
app
apple
axy

lexicosort is the home-made func below. Not thoroughly tested, so
be prudent.

Cheers,

Etienne

======================================================================
##       [vv,ii] = lexicosort(v)
##
## Sort lexicographicaly the rows of matrix v
##
## Author : Etienne Grossmann (address@hidden)
function [vv,ii] = lexicosort(v)

[R,C] = size(v) ;
if C<=1,                      # Single column
[vv,ii] = sort(v);
return
elseif R <= 1,                # Single row (apparently, no need to
# treat as a special case)
vv = v ;
ii = 1 ;
return
end

vv = v ;
if any(v(:)<0) ,              # Here, could be improved
v = v-min(v(:)) ;
end

mv = max(v)+1 ;

cv = fliplr(cumprod(fliplr(mv))) ;
cv = [cv(2:size(cv,2)),1] ;
## cv = cumprod(mv)./mv(1) ;

v2 = sum( (v .* (ones(R,1)*cv))' )  ;
## keyboard
[v3,ii] = sort(v2) ;
vv = vv(ii,:) ;

## Tested with
## v = floor(10*rand(5,2))
## [vv,ii]=lexicosort(v)
## [vv,ii]=lexicosort(v-5)
## [vv,ii]=lexicosort(v(:,1))

-----------------------------------------------------------------------
Octave is freely available under the terms of the GNU GPL.

Octave's home on the web:  http://www.che.wisc.edu/octave/octave.html
How to fund new projects:  http://www.che.wisc.edu/octave/funding.html
Subscription information:  http://www.che.wisc.edu/octave/archive.html
-----------------------------------------------------------------------

```