******** fig7.13 ********** /* Return median of left, center, and right. Order these and hide pivot */ input_type median3( input_type a[], int left, int right ) { int center; center = (left + right) / 2; if( a[left] > a[center] ) swap( &a[left], &a[center] ); if( a[left] > a[right] ) swap( &a[left], &a[right] ); if( a[center] > a[right] ) swap( &a[center], &a[right] ); /* invariant: a[left] <= a[center] <= a[right] */ swap( &a[center], &a[right-1] ); /* hide pivot */ return a[right-1]; /* return pivot */ }