function list = rand_perm(n)

%RAND_PERM yields a random permutation of (1,2,..,n)

%Written by: TONY E. SMITH (6/18/99)

%INPUT: n = list size.
%       s = seed (optional)

%OUTPUT: list = permuted list
%           s = current seed


%Set seed

if nargin == 1
   
   s = 23322;
   
end

% Make list

vec = [1:n];

list = zeros(n,1);

for i = 1:n-1   
   
   [u,s] = rand_num(s);
   
   m = n - i + 1 ;
   
   tempvec = zeros(m-1,1);
   
   k = ceil(m*u);
   
   if k == 1
      
      list(i) = vec(1);
      
      tempvec = vec(2:m);
      
   elseif k == m
      
      list(i) = vec(m);
      
      tempvec = vec(1:m-1);
      
   else
      
      list(i) = vec(k);
      
      tempvec(1:k-1) = vec(1:k-1);
      
      tempvec(k:m-1) = vec(k+1:m);
      
   end
   
   %redefine vec
   
   vec(1:m-1) = tempvec;
   
end

list(n) = vec(1);


