Пузырьковая сортировка со структурами в C - PullRequest
0 голосов
/ 23 марта 2020

У меня есть структура, состоящая из одного элемента char a [50]. Когда я хочу отсортировать их, используя пузырьковую сортировку

struct ccircular {
    char a[50];
};

Items

struct ccircular *aux;
aux=(struct ccircular *)malloc(num*(sizeof(struct ccircular)));

Функция

void ordenar(struct ccircular *aux,int num)
{
    struct ccircular temp;
    struct ccircular *orden;
    orden=aux;
    int i,j;
    for (i=1;i<num;i++)
    {
        for (j=0;j<num;j++)
        {
            if(orden[j].a>orden[j+1].a)
            temp=orden[j];
            orden[j]=orden[j+1];
            orden[j+1]=temp;    
        }       
    }
}

1 Ответ

1 голос
/ 23 марта 2020

Вы должны использовать функцию 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...