Oppgave 1
private static void kvikksortering1(int[] a, int v, int h) { System.out.println("a[" + v + ":" + h + "] legges på stakken"); int p = Tabell.sParter(a, v, h, (v + h) / 2); // bruker midtverdien if (v < p - 1) kvikksortering1(a, v, p - 1); // sorterer intervallet a[v : p - 1] if (p + 1 < h) kvikksortering1(a, p + 1, h); // sorterer intervallet a[p + 1 : h] } public static void kvikksortering(int[] a) // sorterer hele tabellen { if (a.length > 1) kvikksortering1(a, 0, a.length - 1); }
Oppgave 2
Det spiller ingen rolle for sorteringens skyld i hvilken rekkefølge kallene skjer. Men det kan være gunstig å gjøre det rekursive kallet på det intervallet som er minst først. Det vil gjøre at antall kall som legges på programstakken aldri vil bli større enn log2(n) der n er tabellens lengde.
Oppgave 3
La tabellen a = {2,4,6,8,10,5,3,7,1,9}. Da vil a[v:k-1] for hvert nytt rekursivt kall bli:
2 4 6 8 9 5 3 7 1
2 4 6 8 1 5 3 7
2 4 6 7 1 5 3
2 4 6 3 1 5
2 4 5 3 1
2 4 1 3
2 3 1
2 1
1