(I thought i'd posted this, but it seems to have disappeared. Mods, if this 
is a duplicate, please remove)

So I wrote an inplace selection sort in Julia,  to compare its performance 
against a Java counterpart,
Here is the code

function selectionSort!{T}(v::AbstractVector{T}, f)
    
    n = length(v)

    for i=1:n-1
        min  = i
        for j=i+1:n
           if f(v[j], v[min])
                 min = j
           end
        end

        tmp = v[i]
        v[i] = v[min]
        v[min] = tmp
    end
    
end # selection Sort

The equivalent java code is 

     public static void sort(Comparable[] a) {
        int N = a.length;
        for (int i = 0; i < N; i++) {
            int min = i;
            for (int j = i + 1; j < N; j++) {
                if (a[j].compareTo(a[min]) < 0) {
                    min = j;
                }
            }
            Comparable temp = a[i];
            a[i] = a[min];
            a[j] = temp;
        }
    }

I have the following questions
(1) the function f passed in to selectionSort should have the type f: (T,T) 
=> Boolean, ie it takes two elements of the Vector and tells whether they 
are in correct order or not. This could be <  for example. How do I state 
this in Julia iow, how do I specify the function signature?

(2) Are there any horrendous inefficiencies in the Julia code which are 
apparent to experienced Julians? When I benchmark  against the equivalent 
Java I'm getting a factor of 10+ slowdown for larger arrays (though both 
seem O(n^2) as it should be)

size(of array, uniform distribution of doubles between 0 and 1),time taken 
to sort in Java (in milliseconds), time taken to sort in Julia. both times 
are an average of 5 runs for each array size

1000,0.003,0.010
2000,0.003,0.041
4000,0.011,0.165
8000,0.044,0.664
16000,0.206,2.660


I readily admit I have very little idea of what it takes to write 
performant code in Julia. Any help greatly appreciated.
Of course, I might be doing something really stupid in the first place.  
Please point out any errors. 

Thanks in advance,
Ravi

Reply via email to