How to use qsort function to sort floating point array elemets in descending order in C

1 Answer

0 votes
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
   
#define N 10
  
double rand_double(double min, double max) {
    double range = (max - min);
    double div = RAND_MAX / range;
    return min + (rand() / div);
} 
 
int compare(const void *a, const void *b) {
    double aa = *(double*)a, bb = *(double*)b;
   
    if (aa > bb) return -1;
    if (aa < bb) return 1;
     
    return 0;
}
  
void print_array(double arr[], int len) {
    int i;
       
    for (i = 0; i < len; i++) printf("%6.2f", arr[i]);
}
   
int main(void)
{
    int i;
    double arr[N] = { 0.0 };   
          
    srand(time(NULL));
    for (i = 0; i < N; i++)
         arr[i] = rand_double(1, 10); 
    print_array(arr, N);
    printf("\n");
      
    qsort(arr, sizeof(arr)/sizeof(arr[0]), sizeof(arr[0]), compare);
    print_array(arr, N);
    printf("\n\n");
     
    srand(time(NULL));
    for (i = 0; i < N; i++)
         arr[i] = rand_double(0, 1); 
    print_array(arr, N);
    printf("\n");
      
    qsort(arr, sizeof(arr)/sizeof(arr[0]), sizeof(arr[0]), compare);
    print_array(arr, N);
    printf("\n");
       
    return 0;
}
  

   
  
/*
run:
  
  2.34  9.97  1.59  7.99  1.96  6.21  7.56  3.16  4.06  1.68
  9.97  7.99  7.56  6.21  4.06  3.16  2.34  1.96  1.68  1.59
 
  0.15  1.00  0.07  0.78  0.11  0.58  0.73  0.24  0.34  0.08
  1.00  0.78  0.73  0.58  0.34  0.24  0.15  0.11  0.08  0.07
 
*/


answered Sep 28, 2014 by avibootz
edited Dec 10, 2020 by avibootz
...