001package examination3;
002
003/**
004 * Add Javadoc comments to each of the methods
005 * (f0 to f8) in this class.
006 * 
007 * <p>
008 * This code is related to our study of
009 * sorting algorithms.
010 * </p>
011 * 
012 * @author Your Name
013 * @version 30 January 2015
014 */
015public class Sort {
016
017  public static final int SIZE = 12;
018
019  public Sort() {
020    double[] data = f0(SIZE);
021    f1(data);
022    f8(data);
023    f1(data);
024
025    System.out.println();
026
027    data = f0(SIZE);
028    f1(data);
029    f7(data);
030    f1(data);
031  } // Sort()
032  
033  public final double[] f0(int n) {
034    double[] result = new double[n];
035    for (int i = 0; i < result.length; i++) {
036      result[i] = Math.random();
037    } // for
038    return result;
039  } // f0( int )
040
041  public final void f1(double[] data) {
042    for (double x : data) {
043      System.out.printf("%6.2f ", x);
044    } // for
045    System.out.println();
046  } // f1( double [] )
047
048  public final void f2(double[] data, int prefixLength) {
049    System.out.print("[");
050    for (int i = 0; i < prefixLength; i++) {
051      System.out.printf("%6.2f ", data[i]);
052    } // for
053    System.out.print("][");
054    for (int i = prefixLength; i < data.length; i++) {
055      System.out.printf("%6.2f ", data[i]);
056    } // for
057    System.out.println("]");
058  } // f2( double [] )
059
060  public final void f3(double[] data, int i, int j) {
061    double temp = data[i];
062    data[i] = data[j];
063    data[j] = temp;
064  } // f3( double [], int, int )
065
066  public final int f4(double[] data, int start) {
067    int bestGuessSoFar = start;
068    for (int i = start + 1; i < data.length; i++) {
069      if (data[i] < data[bestGuessSoFar]) {
070        bestGuessSoFar = i;
071      } // if
072    } // for
073    return bestGuessSoFar;
074  } // f4( double [], int )
075
076  public final void f5(double[] data, int i, int j) {
077    double temp = data[i];
078    for (int k = i; k > j; k--) {
079      data[k] = data[k - 1];
080    } // for
081    data[j] = temp;
082  } // f5( double [], int, int )
083
084  public final int f6(double[] data, int i) {
085    int j = i;
086    while (j > 0 && data[j - 1] > data[i]) {
087      j--;
088    } // while
089    return j;
090  } // f6( double [], int )
091
092  public final void f7(double[] data) {
093    for (int i = 0; i < data.length; i++) {
094      f2(data, i);
095      int j = f4(data, i);
096      f3(data, i, j);
097    } // for
098  } // f7( double [] )
099
100  public final void f8(double[] data) {
101    for (int i = 0; i < data.length; i++) {
102      f2(data, i);
103      int j = f6(data, i);
104            //System.out.printf( 
105      //  "move data[%2d] to data[%2d] (%6.2f -> %6.2f)\n", 
106      //  i, j, data[i], data[j] );
107      f5(data, i, j);
108    } // for
109  } // f8( double [] )
110  
111} // Sort