C library function to perform sort C library function to perform sort c c

C library function to perform sort


qsort() is the function you're looking for. You call it with a pointer to your array of data, the number of elements in that array, the size of each element and a comparison function.

It does its magic and your array is sorted in-place. An example follows:

#include <stdio.h>#include <stdlib.h>int comp (const void * elem1, const void * elem2) {    int f = *((int*)elem1);    int s = *((int*)elem2);    if (f > s) return  1;    if (f < s) return -1;    return 0;}int main(int argc, char* argv[]) {    int x[] = {4,5,2,3,1,0,9,8,6,7};    qsort (x, sizeof(x)/sizeof(*x), sizeof(*x), comp);    for (int i = 0 ; i < 10 ; i++)        printf ("%d ", x[i]);    return 0;}


C/C++ standard library <stdlib.h> contains qsort function.

This is not the best quick sort implementation in the world but it fast enough and VERYEASY to be used... the formal syntax of qsort is:

qsort(<arrayname>,<size>,sizeof(<elementsize>),compare_function);

The only thing that you need to implement is the compare_function, which takes in twoarguments of type "const void", which can be cast to appropriate data structure, and thenreturn one of these three values:

  • negative, if a should be before b
  • 0, if a equal to b
  • positive, if a should be after b

1. Comparing a list of integers:

simply cast a and b to integersif x < y,x-y is negative, x == y, x-y = 0, x > y, x-y is positivex-y is a shortcut way to do it :)reverse *x - *y to *y - *x for sorting in decreasing/reverse order

int compare_function(const void *a,const void *b) {int *x = (int *) a;int *y = (int *) b;return *x - *y;}

2. Comparing a list of strings:

For comparing string, you need strcmp function inside <string.h> lib.strcmp will by default return -ve,0,ve appropriately... to sort in reverse order, just reverse the sign returned by strcmp

#include <string.h>int compare_function(const void *a,const void *b) {return (strcmp((char *)a,(char *)b));}

3. Comparing floating point numbers:

int compare_function(const void *a,const void *b) {double *x = (double *) a;double *y = (double *) b;// return *x - *y; // this is WRONG...if (*x < *y) return -1;else if (*x > *y) return 1; return 0;}

4. Comparing records based on a key:

Sometimes you need to sort a more complex stuffs, such as record. Here is the simplestway to do it using qsort library.

typedef struct {int key;double value;} the_record;int compare_function(const void *a,const void *b) {the_record *x = (the_record *) a;the_record *y = (the_record *) b;return x->key - y->key;}


For sure: qsort() is an implementation of a sort (not necessarily quicksort as its name might suggest).

Try man 3 qsort or have a read at http://linux.die.net/man/3/qsort