Quick sort void quick_sort (int a[],int l, int r) { int i, j,v, t; if (r>l) { v=a[r];//L’elemento “pivot” è quello più a dx i=l-1; j=r; // i scorre da sx a dx; j da dx a sx for (; ; ) { while ( a[++i]<v); while ( a[--j]>v); if (i>=j) break; t=a[i]; a[i]=a[j]; a[j]=t;//Scambia gli }//elementi i e j t=a[i]; a[i]=a[r]; a[r]=t;//Sistema l’elemento “pivot” quick_sort (a, l, i-1); quick_sort (a, i+1, r); }
i temp j 1 l r pivot Quick sort 4 r > l a[i] < v v a[j] > v? NO i = > j ? NO! Scambio a[i] e a[j] NO a[j] > v i = > j Scambio a[i] e a[r] 4 7 4
li-1 i+1 r quick_sort (a, l, i-1); quick_sort (a, i+1, r); chiamata ricorsiva
321 l r i j pivot 2 v r > l while ( a[++i]<v); while ( a[--j]>v); i = > j ? NO! Scambio a[i] e a[j] temp 1 31 i = > j ? SI! Scambio a[i] e a[r] 2 32
chiamata ricorsiva quick_sort (a, l, i-1); quick_sort (a, i+1, r); Valore uguale FINE Valore uguale FINE