All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wikibrain.matrix.IntSorter Maven / Gradle / Ivy

There is a newer version: 0.9.1
Show newest version
package org.wikibrain.matrix;

import java.util.Random;

/**
 * @author Shilad Sen
 */
public class IntSorter {
    private static void isort(int[] x, CompareInt compare) {
        for (int i = 0; i < x.length; ++i) {
            int t = x[i];
            int j = i;
            for ( ; j > 0 && compare.lessThan(t,x[j-1]); --j)
                x[j] = x[j-1];
            x[j] = t;
        }
    }
    public static void qsort(int[] x, CompareInt compare) {
        Random random = new Random();
        qsortPartial(x,0,x.length-1,compare,random);
        isort(x,compare);
    }
    static void qsortPartial(int[] x, int lower, int upper,
                             CompareInt compare,
                             Random random) {
        if (upper - lower < MIN_QSORT_SIZE)
            return;
        swap(x, lower, lower + random.nextInt(upper-lower+1));
        int t = x[lower];
        int i = lower;
        int j = upper + 1;
        while (true) {
            do {
                ++i;
            } while (i <= upper && compare.lessThan(x[i],t));
            do {
                --j;
            } while (compare.lessThan(t,x[j]));
            if (i > j)
                break;
            swap(x,i,j);
        }
    }
    public static void swap(int[] xs, int i, int j) {
        int temp = xs[i];
        xs[i] = xs[j];
        xs[j] = temp;
    }
    public static interface CompareInt {
        public boolean lessThan(int a, int b);
    }
    static int MIN_QSORT_SIZE = 7;
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy