Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

C++:How to Make sort function work with Double and Integer type

  1. Jan 12, 2012 #1
    So I have a simple selection sort function written. It takes an array of type double as the array to be sorted. If I declare the array to be of type int in my main program and then pass it to my sSort function, it gets mad. There must be a way that programmers deal with this kind fo stuff.

    Here is the code if needed:

    Code (Text):

    /* SORTING ALGORITHMS: Etter Chapter6_5 p281         */
     This is a driver program to test the sorting
     functions below.
    #include <iostream>
    #include <iomanip>
    using namespace std;

    // funtion prototype
    void sSort(double sortableArray[], int numElements);

    // driver program
    int main () {
        // declare objects
        double x[11] = {1.1,1.0,1.5,1.4,1.3,1.8,1.9,1.2,1.7,1.6,2.0};
        int n(11);
        // set format flags for standard output
        cout.setf(ios::fixed); //decimal notation
        cout.precision(2); // out to 2 places
        // display initial state of x[]
        cout << "********************" << endl;
        cout << "Unsorted: \n";
        for (int i=0;i<=n-1;++i)
            cout << x[i] << endl;
        // call sorting algorithm Select Sort
        // display final state of x[]
        cout << "********************" << endl;
        cout << "Sorted: \n";
        for (int i=0;i<=n-1;++i)
            cout << x[i] << endl;
        return 0;

     SELECTION SORT: this function sorts an array with n
     elements into ascending order
    void sSort(double x[], int n)
        // declare local objects
        int m;
        double hold;
        // implement selection sort algorithm
        for (int k=0;k<=n-2;++k)
            // find position of smallest value in array
            // begining at k
            for (int j=k+1;j<=n-1;++j)
                if (x[j]<x[m])
                    m = j;
            // exchange smallest value with value at k
            hold = x[m];
            x[m] = x[k];
            x[k] = hold;
        // void return

  2. jcsd
  3. Jan 12, 2012 #2


    User Avatar
    Homework Helper

    You could create a typedef for the arraytype:

    #typedef ARRAYTYPE double


    #typedef ARRAYTYPE int

    Then use arraytype instead of int or double:

    void sSort(ARRAYTYPE x[], int n){...}

    Since this is C++, you could also duplicate sSort() to create one that sorts integers:

    void sSort(int x[], int n){...}

    You can leave both versions of sSort() in your program. as C++ will treat them as separate functions since their input parameters are different.
  4. Jan 12, 2012 #3

    I like Serena

    User Avatar
    Homework Helper

    In C++ so called templates have been introduced.
    If you define your function like this:

    Code (Text):
    template<class X>
    void sSort(X sortableArray[], int numElements)
       // Replace all occurrences of double by X
    that should do the trick.
  5. Jan 12, 2012 #4


    User Avatar
    Science Advisor

    Hey Saladsamurai.

    The problem is in this line:

    Code (Text):
    double hold;
    When your array is an integer, this variable doesn't change (needs to be the same data type, but instead its a double not an int). Different format, no casting and you're bound to get something screwed up.

    As mentioned above, this is why templates are used.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook