Javolution 6.0.0 java
QuickSort.java
Go to the documentation of this file.
1 /*
2  * Javolution - Java(TM) Solution for Real-Time and Embedded Systems
3  * Copyright (C) 2012 - Javolution (http://javolution.org/)
4  * All rights reserved.
5  *
6  * Permission to use, copy, modify, and distribute this software is
7  * freely granted, provided that this notice is preserved.
8  */
9 package javolution.util.internal.table;
10 
11 import java.util.Comparator;
12 
14 
19 public class QuickSort<E> {
20 
21  private final Comparator<? super E> comparator;
22  private final TableService<E> table;
23 
24  public QuickSort(TableService<E> table, Comparator<? super E> comparator) {
25  this.table = table;
26  this.comparator = comparator;
27  }
28 
29  public void sort() {
30  int size = table.size();
31  if (size > 0) quicksort(0, table.size() - 1);
32  }
33 
34  public void sort(int first, int last) {
35  if (first < last) {
36  int pivIndex = partition(first, last);
37  sort(first, (pivIndex - 1));
38  sort((pivIndex + 1), last);
39  }
40  }
41 
42  // From Wikipedia Quick Sort - http://en.wikipedia.org/wiki/Quicksort
43  //
44  void quicksort(int first, int last) {
45  int pivIndex = 0;
46  if (first < last) {
47  pivIndex = partition(first, last);
48  quicksort(first, (pivIndex - 1));
49  quicksort((pivIndex + 1), last);
50  }
51  }
52 
53  private int partition(int f, int l) {
54  int up, down;
55  E piv = table.get(f);
56  up = f;
57  down = l;
58  do {
59  while (comparator.compare(table.get(up), piv) <= 0 && up < l) {
60  up++;
61  }
62  while (comparator.compare(table.get(down), piv) > 0 && down > f) {
63  down--;
64  }
65  if (up < down) { // Swaps.
66  E temp = table.get(up);
67  table.set(up, table.get(down));
68  table.set(down, temp);
69  }
70  } while (down > up);
71  table.set(f, table.get(down));
72  table.set(down, piv);
73  return down;
74  }
75 }
javolution.util.internal.table.QuickSort.table
final TableService< E > table
Definition: QuickSort.java:22
javolution
javolution.util.service
Definition: BitSetService.java:9
javolution.util.internal.table.QuickSort.comparator
final Comparator<? super E > comparator
Definition: QuickSort.java:21
javolution.util.internal.table.QuickSort.partition
int partition(int f, int l)
Definition: QuickSort.java:53
javolution.util.internal.table.QuickSort.sort
void sort(int first, int last)
Definition: QuickSort.java:34
javolution.util.internal.table.QuickSort.sort
void sort()
Definition: QuickSort.java:29
javolution.util.internal.table.QuickSort
Definition: QuickSort.java:19
javolution.util.internal.table.QuickSort.QuickSort
QuickSort(TableService< E > table, Comparator<? super E > comparator)
Definition: QuickSort.java:24
javolution.util.internal.table.QuickSort.quicksort
void quicksort(int first, int last)
Definition: QuickSort.java:44
javolution.util.service.TableService
Definition: TableService.java:21
javolution.util
Definition: FastBitSet.java:9