/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.lucene.util; /** An implementation of a selection algorithm, ie. computing the k-th greatest * value from a collection. */ public abstract class Selector { /** Reorder elements so that the element at position {@code k} is the same * as if all elements were sorted and all other elements are partitioned * around it: {@code [from, k)} only contains elements that are less than * or equal to {@code k} and {@code (k, to)} only contains elements that * are greater than or equal to {@code k}. */ public abstract void select(int from, int to, int k); void checkArgs(int from, int to, int k) { if (k < from) { throw new IllegalArgumentException("k must be >= from"); } if (k >= to) { throw new IllegalArgumentException("k must be < to"); } } /** Swap values at slots <code>i</code> and <code>j</code>. */ protected abstract void swap(int i, int j); }