You can use the standard C function qsort , declared in the header of <stdlib.h> .
Below is a sample program that shows how you can sort an array of pointers to a structure.
#include <stdlib.h> #include <stdio.h> #include <string.h> int cmp(const void *a, const void *b) { const struct internet_prov *left = *(const struct internet_prov **)a; const struct internet_prov *right = *(const struct internet_prov **)b; return (right->tariff < left->tariff) - (left->tariff < right->tariff); } #define N 3 int main( void ) { struct internet_prov * prov[N]; for (size_t i = 0; i < N; i++) { char name[] = "A"; name[0] += i; prov[i] = (internet_prov *)malloc(sizeof(internet_prov)); strcpy(prov[i]->name, name); prov[i]->speed = rand() % 100; prov[i]->tariff = rand() % 100 / 10.0f; } for (size_t i = 0; i < N; i++) { printf("%s %u %f\n", prov[i]->name, prov[i]->speed, prov[i]->tariff); } printf("\n"); qsort(prov, N, sizeof(struct internet_prov *), cmp); for (size_t i = 0; i < N; i++) { printf("%s %u %f\n", prov[i]->name, prov[i]->speed, prov[i]->tariff); } for (size_t i = 0; i < N; i++) { free(prov[i]); } }
The output of the program to the console may look as follows.
A 41 6.700000 B 34 0.000000 C 69 2.400000 B 34 0.000000 C 69 2.400000 A 41 6.700000
qsortfunction and redefine the comparator in it. - pavel