diff --git a/Main.java b/Main.java index be5f0e8..006d29a 100644 --- a/Main.java +++ b/Main.java @@ -6,6 +6,7 @@ public class Main { + private static final int THRESHOLD = 32; private static int[] ranks; public static void main(String[] args) { @@ -45,9 +46,19 @@ public int compare(Point p1, Point p2) { } private static List findRank(List points) { - // Termination condition of the split - if(points.size() <= 1) + // If size of points is small enough, sort them by insertion sort, and update their ranks + if(points.size() <= THRESHOLD) { + for(int i=1, j; i=0 && points.get(j).isGreater(temp); j--) { + points.set(j+1, points.get(j)); + } + ranks[temp.index] += j+1; + points.set(j+1, temp); + } + return points; + } List leftPoints = new LinkedList(points.subList(0, points.size() / 2)); List rightPoints = new LinkedList(points.subList(points.size() / 2, points.size()));