if (elements[d].Name > elements[d+1].Name)
C Оператор >
недостаточно "умен", чтобы сравнивать строки в словаре; это только для чисел или указателей. Это условие фактически сравнивает указатели char*
с первыми символами имен.
Вместо этого вам потребуется функция strcmp
:
if (strcmp(elements[d].Name, elements[d+1].Name) > 0)
Также вместо того, чтобы писать собственную пузырьковую сортировку, вы можете подумать, что qsort
, который предназначен именно для такого рода вещей, немного проще в написании и может быть быстрее для больших массивов:
#include <stdlib.h>
#include <string.h>
int compareElementNames(const void* p1, const void* p2)
{
const ElementType *elem1 = p1;
const ElementType *elem2 = p2;
return strcmp(elem1->Name, elem2->Name);
}
void sortAlphabetical(ElementType elements[NUM_ELEMENTS])
{
qsort(elements, NUM_ELEMENTS, sizeof(*elements), compareElementNames);
}