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

  • C/++/#
  • Thread starter Saladsamurai
  • Start date
  • #1
3,003
2
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;
}
/*---------------------------------------------------*/
 

Answers and Replies

  • #2
rcgldr
Homework Helper
8,706
534
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.
 
  • #3
I like Serena
Homework Helper
6,577
176
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.
 
  • #4
chiro
Science Advisor
4,790
132
Hey Saladsamurai.

The problem is in this line:

Code:
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.
 

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

Replies
5
Views
10K
Replies
2
Views
3K
Replies
12
Views
1K
Replies
7
Views
47K
Replies
6
Views
7K
Replies
1
Views
3K
  • Last Post
Replies
5
Views
11K
Replies
13
Views
6K
Replies
8
Views
41K
Top