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

• C/++/#
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:
/* 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
sSort(x,n);

// 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
m=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
return;
}
/*---------------------------------------------------*/

Related Programming and Computer Science News on Phys.org
rcgldr
Homework Helper
You could create a typedef for the arraytype:

#typedef ARRAYTYPE double

or

#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.

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

Code:
template<class X>
void sSort(X sortableArray[], int numElements)
{
// Replace all occurrences of double by X
}
that should do the trick.

chiro
double hold;