Вы должны использовать структурные назначения, потому что они радикально более компактны, чем повторные назначения для каждого элемента структуры.Например:
struct Record
{
int seqnum;
int threat;
int addrs[2];
int ports[2];
char dns_name[32];
};
void bubblesort(struct Record *ptr, int records,
int (*fcomp)(const void *, const void *))
{
int swapped;
do
{
swapped = 0;
for (int i = 0; i < records - 1; i++)
{
if (fcomp(ptr + i, ptr + i + 1) > 0)
{
swapped = 1;
struct Record tmp = ptr[i];
ptr[i] = ptr[i + 1];
ptr[i + 1] = tmp;
}
}
} while (swapped != 0);
}
Обратите внимание, что в этом коде временное значение tmp
является структурой, а не указателем на структуру.
Вы также опустили условие while (swapped != 0);
иТрейлинг }
в коде в вопросе.Я положил их путем вывода.Этот код компилируется.Я не запускал его - я просто уменьшил код обмена до трех строк с 21 или около того.