Discover MakerZone

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

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Problem 293. Generalized sorting

Created by S L

Write 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.)

Tags

Problem Group

Solution Statistics

23 correct solutions 26 incorrect solutions
Last solution submitted on Feb 20, 2014