⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 模板数组排序.cpp

📁 C++源代码集
💻 CPP
字号:
#include <iostream.h>
#include <iomanip.h>
#include <string.h>

const int MIN_SIZE=30;

enum Logical{FALSE,TRUE};

template<class T>
class myArray
{
public:
	myArray(int nSize,T Initial);
	~myArray()
	{delete[] m_pArray;}
	T &operator[](int nIndex)
	{return m_pArray[nIndex];}
	void Show(const int nNumElems,
		const char *pszMsg=" ",
		const Logical bOneLine=TRUE);
	void Sort(int nNumElems);

protected:
	T *m_pArray;
	int m_nSize;
};

template<class T>
myArray< T >::myArray(int nSize,T InitVal)
{
	m_nSize=(nSize>1)? nSize:1;
	m_pArray=new T[m_nSize];
	for(int i=0;i<m_nSize;i++)
		m_pArray[i]=InitVal;
}

template<class T>
void myArray< T >::Show(const int nNumElems,
				   const char *pszMsg,
				   const Logical bOneLine)
{
	cout << pszMsg<<endl;
	if(bOneLine)
	{
		for(int i=0;i<nNumElems;i++)
			cout << m_pArray[i] << ' ';
		cout << endl;
	}
	else
	{
		for(int i=0;i<nNumElems;i++)
			cout << m_pArray[i]<<endl;
		cout << endl;
	}
}

template<class T>
void myArray< T >::Sort(int nNumElems)
{
	int nOffset=nNumElems;
	Logical bSorted;

	//check argument of parameter nNumbers
	if(nNumElems<2)
		return;

	do
	{
		nOffset=(nOffset*8)/11;
		nOffset=(nOffset<1)?1:nOffset;
		bSorted=TRUE;//set sorted flag
		//compare elements
		for(int i=0,j=nOffset;
		        i < (nNumElems-nOffset);
				i++,j++)
		{
			if(m_pArray[i]>m_pArray[j])
			{
				//swap elements
				T nSwap=m_pArray[i];
				m_pArray[i]=m_pArray[j];
				m_pArray[j]=nSwap;
				bSorted=FALSE;//clear sorted flag
			}
		}
	}while(!bSorted||nOffset!=1);
}

class myString
{
public:
	myString(int nSize=MIN_SIZE)
	{m_pszString=new char[m_nSize=nSize];}
	myString(myString &String);
	myString(const char *pszString);
	myString(const char cChar);
	~myString()
	{delete[]m_pszString;}
	int getLen()
	{return strlen(m_pszString);}
	int getMaxLen()
	{return m_nSize;}
	myString &operator=(myString &aString);
	myString& operator=(const char *pszString);
	myString &operator=(const char cChar);
	friend int operator > (myString &aString1,myString &aString2)
	{return(strcmp(aString1.m_pszString,aString2.m_pszString) > 0)?1:0;}
    friend ostream &operator << (ostream &os,myString &aString);

protected:
	char *m_pszString;
	int m_nSize;
};

myString::myString(myString &aString)
{
	m_pszString=new char[m_nSize=aString.m_nSize];
	strcpy(m_pszString,aString.m_pszString);
}

myString::myString(const char *pszString)
{
	m_pszString=new char[m_nSize=strlen(pszString)+1];
	strcpy(m_pszString,pszString);
}

myString::myString(const char cChar)
{
	m_pszString=new char[m_nSize=MIN_SIZE];
	m_pszString[0]=cChar;
	m_pszString[1]='\0';
}

myString &myString::operator=(myString &aString)
{
	//source string small enough to copy?
	if(strlen(aString.m_pszString)<unsigned(m_nSize))
		strcpy(m_pszString,aString.m_pszString);
	else
		//copy first m_nSize-1 characters
		strncpy(m_pszString,aString.m_pszString,m_nSize-1);
	return *this;
}

myString &myString::operator=(const char *pszString)
{
	//source string small enough to copy?
	if(strlen(pszString)<unsigned(m_nSize))
		strcpy(m_pszString,pszString);
	else
		//copy first m_nSize-1 characters
		strncpy(m_pszString,pszString,m_nSize-1);
	return *this;
}

myString &myString::operator=(const char cChar)
{
	if(m_nSize > 1)
	{
		m_pszString[0]=cChar;
		m_pszString[1]='\0';
	}
    return *this;
}

ostream &operator << (ostream &os,myString &aString)
{
	os << aString.m_pszString;
	return os;
}

main()
{
	const int MAX_ELEMS=10;
	int nArr[MAX_ELEMS]={89,34,32,47,15,81,78,36,63,83};
	int cArr[MAX_ELEMS]={'C','W','r','Y','k','J','X','Z','y','s'};
	myArray<int> IntegerArray(MAX_ELEMS,0);
	myArray<char> CharArray(MAX_ELEMS,' ');
	myArray< myString > StringArray(MAX_ELEMS," ");

	for(int i=0;i<MAX_ELEMS;i++)
		IntegerArray[i]=nArr[i];
	for(i=0;i<MAX_ELEMS;i++)
		CharArray[i]=cArr[i];
	StringArray[0]="London ";
	StringArray[1]="Paris ";
	StringArray[2]="Madrid ";
	StringArray[3]="Rome ";
	StringArray[4]="Athens ";
	StringArray[5]="Bern ";
	StringArray[6]="Lisbon ";
	StringArray[7]="Warsaw ";
	StringArray[8]="Berlin ";
	StringArray[9]="Dublin ";

	IntegerArray.Show(MAX_ELEMS,"Unsorted array is: ");
	IntegerArray.Sort(MAX_ELEMS);
	IntegerArray.Show(MAX_ELEMS,"Sorted array is: ");
	cout << "\n\n" ;

	CharArray.Show(MAX_ELEMS,"Unsorted array is: ");
	CharArray.Sort(MAX_ELEMS);
	CharArray.Show(MAX_ELEMS,"Sorted array is: ");
	cout << "\n\n";

	StringArray.Show(MAX_ELEMS,"Unsorted array is: ");
	StringArray.Sort(MAX_ELEMS);
	StringArray.Show(MAX_ELEMS,"Sorted array is: ");

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -