MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply TodayWrite generalized sort function `sortg()` that sorts array elements in “ascending” order with given comparison function. A comparison function takes two arguments and return true if the first argument goes before the second in the specific (strick weak) ordering.

The function have to be stable, that is, if A has elements are “equal” (strictly speaking, both `comp(a1, a2)` and `comp(a2, a1)` are false), then the ordering of these elements must be preserved. Since MATLAB's `sort()` function is stable, `sort(A)` and `sortg(A, @lt)` will be equivalent.

(Assume that the input argument `A` will be a vector, not a matrix, and the comparison function `comp()` will do scalar expansion like MATLAB's `lt()` ( `<` ), that is, comparing scalar with vector is possible.)

**Example**

A = [1, 0, 0 + 1i]; [B, IX] = sortg(A, @(a, b) abs(a) < abs(b));

=> B == [0, 1, 0 + 1i]; IX == [2 1 3]

(1 and 0 + 1i have the same absolute value, but 1 has to appear before 0 + 1i, as the original ordering.)

23 correct solutions
26 incorrect solutions

Last solution submitted on Feb 20, 2014