Вы должны использовать функцию strcmp для сравнения двух строк, это невозможно в C с операторами <>.
Я использовал оптимизированный алгоритм, где l oop останавливается до тех пор, пока не потребуется больше свопов; это потому, что часто случается так, что за один проход более одной пары элементов меняются местами. Подробное объяснение: Wikipedia Bubblesort
Первый раз, когда l oop пробегает без замены элемента, он завершается и останавливается
void ordenar(struct ccircular *aux, int num) {
int i;
bool swapped = false;
struct ccircular temp;
do {
swapped = false;
for (i = 0; i < (num-1); ++i) {
if (strcmp(aux[i].a, aux[i+1].a) > 0) {
temp = aux[i];
aux[i] = aux[i+1];
aux[i+1] = temp;
swapped = true;
}
}
num--;
} while (swapped == true);
}