A mi me parece que esto: while ( (izq <= der) && (v[cen] != x) ) no tiene ningún sentido a menos que obra sea en realidad una clase y tengas implementado el operador != en la misma, lo mismo aca: if (x < v[cen]).
VC++ no compila ninguna de las dos lineas, pero podrías cambiarlas por:
Código:
while ( (izq <= der) && (v[cen].autor != x) )
{
if (x < v[cen].autor)