Προς το περιεχόμενο

συνάρτηση για ταξινόμηση


voulaji

Προτεινόμενες αναρτήσεις

Δημοσ.

To παρακάτω πρόγραμμα ταξινομεί ένα δυναμικό πίνακα που ορίζει ο χρήστης στην main() με την μέθοδο selection sort σε C++ χωρίς την χρήση της STL(χαζομάρα). Έχουν υλοποιηθεί και άλλα καλά μέσα στην κλάση του πίνακα που με την χρήση των overloaded operators μπορούμε να κάνουμε πολλά καλά όπως η σύγκριση 2 πινάκων με τον τελεστή (== ή τον !=). Για ρίξε μια ματιά, αύριο θα βρέξει πάντως..

 

>
//---------------------------------------------------------------------------

#include <iostream>
#include <cstdlib>


using namespace std;
//---------------------------------------------------------------------------
/* Class. */
class Array
{
/* Overload input-output operators. */
friend ostream& operator<<(ostream& ost, const Array& nA);
friend istream& operator>>(istream& ist, Array& nA);
public:
	/* Default Constructor. */
	Array(int Sz = 10);
	/* Copy Constructor. */
	Array(const Array& nA);
	/* Destructor. */
	~Array();
	/* Assignment operator. */
	const Array& operator=(const Array& nA);
	/* Equality Operator. */
	bool operator==(const Array& nA) const;
	/* Inequality Operator. */
	bool operator!=(const Array& nA) const;
	void SortArray();
	int getMinIndex(int StartIndex, int EndIndex);
	void ElementSwap(int *x, int *y);
private:
	int *nArray;
	int nArraySz;
};

/* Functions. */
void Array::ElementSwap(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
Array::~Array()
{
delete[] nArray;
nArray = NULL;
}
Array::Array(const int Sz)
{
int i;
nArraySz = (Sz > 0 ? Sz : 10);
nArray = new int[sz];
for(i = 0; i < nArraySz; i++)
	nArray[i] = 0;
}
const Array& Array::operator =(const Array& nA)
{
if(&nA != this)
{
	int i;
	if(nArraySz != nA.nArraySz)
	{
		delete[] nArray;
		nArraySz = nA.nArraySz;
		nArray = new int[nArraySz];
	}
	for(i = 0; i < nArraySz; i++)
		nArray[i] = nA.nArray[i];
}
return *this;
}
Array::Array(const Array& nA)
{
int i;
nArraySz = nA.nArraySz;
nArray = new int[nArraySz];
for(i = 0; i < nArraySz; i++)
	nArray[i] = nA.nArray[i];
}
ostream& operator<<(ostream& ostr, const Array& nA)
{
int i;
for(i = 0; i < nA.nArraySz; i++)
	ostr << nA.nArray[i] << " ";
ostr << endl;
return ostr;
}
istream& operator>>(istream& istr, Array &nA)
{
int i = 0;
cout << "Enter elements into the array: " << endl;
for(i = 0; i < nA.nArraySz; i++)
{
	cout << "Array[" << i << "]:";
	istr >> nA.nArray[i];
}
cout << endl;
return istr;
}
int Array::getMinIndex(int StartIndex, int EndIndex)
{
int i,MinIndex = StartIndex;
for(i = StartIndex+1; i <= EndIndex; i++)
	if(nArray[i] < nArray[MinIndex])
		MinIndex = i;
return MinIndex;
}
void Array::SortArray()
{
int index,EndIndex = nArraySz -1;
for(index = 0; index < EndIndex; index++)
	ElementSwap(&nArray[index], &nArray[getMinIndex(index, EndIndex)]);
}
bool Array::operator ==(const Array& nA) const
{
if(nArraySz != nA.nArraySz)
	return false;
else
{
	int i;
	for(i = 0; i < nArraySz && nArray[i] == nA.nArray[i]; i++);
	if(i == nArraySz)
		return true;
	return false;
}
}

bool Array:: operator !=(const Array& nA) const
{
return !(*this == nA);
}

/* Main Code. */
int main(int argc, char* argv[])
{
/* Create An array class. */
Array *A = new Array(12);
cin >> *A;
cout << "Initial Array:" << endl;
cout << *A;
/* Sorted. */
cout << "Sorted Array:" << endl;
A->SortArray();
cout << *A;
/* Free Memory. */
A->~Array();
cout << "Hit enter to continue..." << endl;
cin.get();
cin.get();
return 0;
}
//---------------------------------------------------------------------------

 

Τυπωμένα αποτελέσματα:

 

Enter elements into the array:

Array[0]:6

Array[1]:3

Array[2]:1

Array[3]:2

Array[4]:8

Array[5]:9

Array[6]:22

Array[7]:3

Array[8]:51

Array[9]:19

Array[10]:11

Array[11]:5

 

Initial Array:

6 3 1 2 8 9 22 3 51 19 11 5

Sorted Array:

1 2 3 3 5 6 8 9 11 19 22 51

Hit enter to continue...

Δημοσ.

Συγνώμη αλλά εκ παραδρομής δεν έβαλα την ερώτηση.

Λοιπόν, για την πιο πάνω συνάρτηση θέλω να βρω το αποτέλεσμα της εκτέλεσής της και πως μπορώ να την διαφοροποιήσω ώστε να γίνει πιο αποδοτική.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...