rendered paste bodyimport java.util.Random; public class QuickSort { public int[] medianQuickSort(int[] q) { int[] less, pivotList, greater; less = new int[q.length]; pivotList = new int[q.length]; greater = new int[q.length]; int pivotMedian; if(q.length <= 1) { return q; } pivotMedian=getMedian(q[0], q[q.length/2], q[q.length-1]); int li=0; int gi=0; for(int i=0; i<q.length; i++) { if(q[i] < q[pivotMedian]) { less[li++] = q[i]; } else if(q[i] >= q[pivotMedian]) { greater[gi++] = q[i]; } } return concatenate(randomQuickSort(less), null, randomQuickSort(greater)); } private int getMedian(int a, int b, int c) { return Math.min(Math.max(a, b), Math.min(Math.max(a, c), Math.max(b, c))); } public int[] randomQuickSort(int[] q) { int[] less, pivotList, greater; less = new int[q.length]; pivotList = new int[q.length]; greater = new int[q.length]; int pivotIndex; if(q.length <= 1) { return q; } Random pivot = new Random(); pivotIndex=pivot.nextInt(q.length); int li=0; int gi=0; for(int i=0; i<q.length; i++) { if(i != pivotIndex && q[i] < q[pivotIndex]) { less[li++] = q[i]; } else if(i != pivotIndex && q[i] >= q[pivotIndex]) { greater[gi++] = q[i]; } } pivotList[] = q[pivotIndex]; return concatenate(randomQuickSort(less), pivotList, randomQuickSort(greater)); } private int[] concatenate(int[] n1, int[] n2, int[] n3) { int[] merger = new int[n1.length+n2.length+n3.length]; if(n1!=null) { for(int i=0; i<n1.length; i++) { merger[i] = n1[i]; } } if(n2!=null) { for(int i=1; i<=n2.length; i++) { merger[i+n1.length] = n2[i]; } } if(n3!=null) { for(int i=1; i<=n3.length; i++) { merger[i+n1.length+n2.length] = n3[i]; } } return merger; }}