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

Click For Summary
The discussion revolves around a selection sort function in C++ that is designed to sort an array of doubles. The issue arises when attempting to pass an integer array to this function, resulting in a type mismatch error. To resolve this, several solutions are proposed. One approach is to create a typedef for the array type, allowing the function to accept either doubles or integers. Another suggestion is to implement function overloading by creating separate sSort functions for each data type. The most efficient solution discussed is the use of C++ templates, which enable the function to handle any data type by replacing specific type declarations with a template parameter. Additionally, it is noted that the variable used for holding values during sorting must match the data type of the array to avoid errors.
Saladsamurai
Messages
3,009
Reaction score
7
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
		// beginning 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;
}
/*---------------------------------------------------*/
 
Technology news on Phys.org
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.
 
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.
 
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.
 
Learn If you want to write code for Python Machine learning, AI Statistics/data analysis Scientific research Web application servers Some microcontrollers JavaScript/Node JS/TypeScript Web sites Web application servers C# Games (Unity) Consumer applications (Windows) Business applications C++ Games (Unreal Engine) Operating systems, device drivers Microcontrollers/embedded systems Consumer applications (Linux) Some more tips: Do not learn C++ (or any other dialect of C) as a...

Similar threads

Replies
20
Views
2K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 6 ·
Replies
6
Views
12K
Replies
12
Views
2K
  • · Replies 23 ·
Replies
23
Views
3K
  • · Replies 39 ·
2
Replies
39
Views
5K
  • · Replies 35 ·
2
Replies
35
Views
4K
  • · Replies 17 ·
Replies
17
Views
2K
  • · Replies 36 ·
2
Replies
36
Views
6K
  • · Replies 3 ·
Replies
3
Views
2K