Skip to content

Instantly share code, notes, and snippets.

@redhead
Created January 14, 2012 20:08
Show Gist options
  • Save redhead/1612711 to your computer and use it in GitHub Desktop.
Save redhead/1612711 to your computer and use it in GitHub Desktop.
Integer randomizedSelect(List<Integer> elements, int k) {
if(elements.size() == 1) return elements.get(0);
Integer pivot = elements.get(0);
List<Integer> smaller = new ArrayList<Integer>();
for(Integer i : elements) {
if(i < pivot) smaller.add(i);
}
if(k < smaller.size()) return randomizedSelect(smaller, k);
List<Integer> equal = new ArrayList<Integer>();
for(Integer i : elements) {
if(i == pivot) equal.add(i);
}
if(k - smaller.size() < equal.size()) return equal.get(0);
List<Integer> greater = new ArrayList<Integer>();
for(Integer i : elements) {
if(i > pivot) greater.add(i);
}
return randomizedSelect(greater, k - smaller.size() - equal.size());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment