#1
  1. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Jun 2013
    Posts
    1
    Rep Power
    0

    Sort random arrays with a float range


    I'm having trouble setting up the following assignment:

    Write a C program that sort an array of 1000 elements. The array contains random
    float numbers between 0.5 and 19.5

    The user will have the option to choose between:
    1. Incremented sort (lowest value to highest).
    2. Decremented sort (highest value to lowest).

    Requirements:
    Implement user defined functions to execute the sorting process.
    The function prototypes are as follows:

    1. void incrementArraySort(float A[], int size)
    2. void decrementArraySort(float A[], int size)

    Where A is the array to be sorted, the variable size denote the size of array A.
    Note the functions return type is void.
    Display the result in the command line.


    so far I have this (I know is wrong but is what I could came out with )( I got to set up 0.5 as the min number, but how do I set 19.5 as the max number?):

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    
    void incrementArraySort(float A[], int size);
    void decrementArraySort(float A[], int size);
    
    
    int main ()
    {
        int i;
        float A[1000];
        for ( i = 0; i <= 999; i++)
        {
           A[i] = (float)i + 0.5;
    
        }
        srand((unsigned) time( NULL ) );
        for ( i = 0; i <= 999; i++)
        {
            int index1 = i;
            int index2 = rand()%1000;
    
            int temp;
            temp = A[index1];
            A[index1] = A[index2];
            A[index2] = temp;
        }
        for ( i = 0; i <= 999; i++)
        printf("element[%d]: %f", i, A[i]);
    
    
    
    
        return 0;
    }
    Thanks in advance.
  2. #2
  3. No Profile Picture
    Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Jun 2013
    Posts
    40
    Rep Power
    19
    1. To make random float between in range a and b you can use this.

    (b-a) * ((float)rand() / RAND_MAX) + a
    Your code can look like
    Code:
    srand(time( NULL ) );
    
    for (int i =0;  i<1000; i++)
       A[i] = (19.5 - 0.5)  * ((float)rand() / RAND_MAX) + 0.5;
    2. Using qsort from stdlib is a quick way to sort.

    Ascending sort:
    qsort(A, 1000, sizeof(float), asc_compare);

    Decending sort:
    qsort(A, 1000, sizeof(float), desc_compare);


    Comparing floating points is not easy, but there is some trick. We compare bit pattern as integer and can tell which is larger or smaller.

    Code:
    int asc_compare(const void * a, const void * b){
       return ( *(int*)a  < *(int*)b );
    }
    
    int desc_compare(const void * a, const void * b){
       return ( *(int*)a  > *(int*)b );
    }

IMN logo majestic logo threadwatch logo seochat tools logo