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

1 Answer

0 votes
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
  
#define N 10
 
void print_array(double arr[], int len);
int compare(const void *a, const void *b);
double rand_double(double min, double max);
  
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;
}
 
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]);
}
  
 
/*
run:
 
  7.75  4.46  8.58  6.33  8.61  5.07  4.60  2.31  9.84  3.18
  2.31  3.18  4.46  4.60  5.07  6.33  7.75  8.58  8.61  9.84

  0.75  0.38  0.84  0.59  0.85  0.45  0.40  0.15  0.98  0.24
  0.15  0.24  0.38  0.40  0.45  0.59  0.75  0.84  0.85  0.98

*/


answered Sep 27, 2014 by avibootz

Related questions

...