public class PikaJarj { // Pikajärjestäminen, AW 13.11.97

  private static void pikaJarjesta(int[] taulu, int alku, int loppu) {
    int jakoAlkio, vasen, oikea;

    vasen = alku;
    oikea = loppu;

    jakoAlkio = taulu[(alku+loppu)/2];
    do {

       while (taulu[vasen]<jakoAlkio)
         ++vasen;
       while (jakoAlkio<taulu[oikea])
         --oikea;
       if (vasen<=oikea) {
         int apu = taulu[vasen];
         taulu[vasen] = taulu[oikea];
         taulu[oikea] = apu;
         ++vasen;
         --oikea;
       }
    } while (vasen<oikea);

    if (alku < oikea)
      pikaJarjesta(taulu, alku, oikea);
    if (vasen < loppu)
      pikaJarjesta(taulu, vasen, loppu);
  }


  public static void main(String[] args) { // testipääohjelma

    int[] a = {40, 20, 50, 10, 30};

    for (int i=0; i<a.length; ++i)
       System.out.print(a[i]+" ");
    System.out.println();

    pikaJarjesta(a, 0, a.length-1);

    for (int i=0; i<a.length; ++i)
       System.out.print(a[i]+" ");
    System.out.println();

    int[] b = new int[18];
    for (int i=0; i<b.length; ++i)
      b[i] = (int)(300*Math.random()); // vrt. harj. 15

    for (int i=0; i<b.length; ++i)
       System.out.print(b[i]+" ");
    System.out.println();

    pikaJarjesta(b,  0, b.length-1);
 
    for (int i=0; i<b.length; ++i)
       System.out.print(b[i]+" ");
    System.out.println();
  }
}

