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

📄 更新版本.cpp

📁 经典 C++代码
💻 CPP
字号:
#include<iostream.h>
#include<iomanip.h>

enum Logical {FALSE,TRUE};

const int ALL_ARRAY=-1;
const int NOT_FOUND=-1;
const int BAD_VALUE=-32768;

class myArray
{
public:
	myArray(int nMaxElems,int nInitVal=0);
	~myArray();
	Logical Recall(int &nVal,int nInitVal);
	Logical Store(int nVal,int nIndex);
	void Show(const char* pszMag=" ",
		      const int nNumElems=ALL_ARRAY,
			  const Logical bOneLine=TRUE);
	void Sort();
	int Search(int nSearchVal,int nFirst=0);

protected:
	int m_nMaxElems;
	int m_nWorkSize;
	Logical m_bIsSorted;
	int *m_pnArray;

	int LinearSearch(int nSearchVal,int nFirst=0);
	int BinarySearch(int nSearchVal,int nFirst=0);
};

myArray::myArray(int nMaxElems,int nInitVal)
{
	m_nMaxElems=(nMaxElems<1)?1:nMaxElems;
	m_nWorkSize=0;
	m_bIsSorted=FALSE;
	m_pnArray=new int[m_nMaxElems];
	for(int i=0;i<m_nMaxElems;i++)
		m_pnArray[i ]=nInitVal;
}

myArray::~myArray()
{
	delete []m_pnArray;
}

Logical myArray::Recall(int &nVal,int nIndex)
{
	if(nIndex>=0&&nIndex<m_nWorkSize)
	{
		nVal=m_pnArray[nIndex];
		return TRUE;
	}
	else
		return FALSE;
}

Logical myArray::Store(int nVal,int nIndex)
{
	if(nIndex<0||nIndex>=m_nMaxElems)
		return FALSE;

	if(nIndex>=m_nWorkSize)
		m_nWorkSize=nIndex+1;
	m_pnArray[nIndex]=nVal;
	m_bIsSorted=FALSE;
	return TRUE;
}

void myArray::Show(const char*pszMsg,
				   const int nNumElems,
				   const Logical bOneLine)
{
	int nCount;

	cout<<pszMsg<<endl;
	nCount=(nNumElems==ALL_ARRAY)?m_nWorkSize:nNumElems;
	if(bOneLine)
	{
		for(int i=0;i<nCount;i++)
			cout<<m_pnArray[i ]<<' ';
		cout<<endl;
	}
	else
	{
		for(int i=0;i<nCount;i++)
			cout<<m_pnArray[i ]<<' ';
		cout<<endl;
	}
}

void myArray::Sort()
{
	if(m_bIsSorted)
		return; //exit if array is already sorted

	//sort the array
	int nOffset=m_nWorkSize;
	int nElemI,nElemJ;

	do
	{
		nOffset=(nOffset*8)/11;
		nOffset=(nOffset<1)?1:nOffset;
		m_bIsSorted=TRUE;  //set sorted flag;
		//compare elements
		for(int i=0,j=nOffset;
			i<(m_nWorkSize-nOffset);
			i++,j++)
		{
			nElemI=m_pnArray[i ];
			nElemJ=m_pnArray[j];
			if(nElemI>nElemJ)
			{
				m_pnArray[i ]=nElemJ;
				m_pnArray[j]=nElemI;
				m_bIsSorted=FALSE;
			}
		}
	}while(!m_bIsSorted||nOffset!=1);
}

int myArray::Search(int nSearchVal,int nFirst)
{
	return(m_bIsSorted)?BinarySearch(nSearchVal,nFirst):
						LinearSearch(nSearchVal,nFirst);
}

int myArray::BinarySearch(int nSearchVal,int nFirst)
{
	int nMedian;
	int nLast=m_nWorkSize-1;
	nFirst=(nFirst<0||nFirst>=m_nWorkSize)?
		0:nFirst;
	do
	{
		nMedian=(nFirst+nLast)/2;
		if(nSearchVal<m_pnArray[nMedian])
			nLast=nMedian-1;
		else
			nFirst=nMedian+1;
	}while(!(nSearchVal==m_pnArray[nMedian]||nFirst>nLast));

	return(nSearchVal==m_pnArray[nMedian])?
		nMedian:NOT_FOUND;
}

int myArray::LinearSearch(int nSearchVal,int nFirst)
{
	for(int i=nFirst;i<m_nWorkSize;i++)
		if(m_pnArray[i ]==nSearchVal)
			break;
		return(i<m_nWorkSize)?i:NOT_FOUND;
}

main()
{
	const int MAX_ELEMS=10;
	int nArr[MAX_ELEMS]={33,54,98,47,15,
		81,78,36,63,83};
	myArray anArray(10);
	int k;

	for(int i=0;i<MAX_ELEMS;i++)
		anArray.Store(nArr[i ],i);
	anArray.Show("Unordered array is:");

	for(i=MAX_ELEMS-1;i>=0;i--)
	{
		cout<<"Searching for"<<nArr[i ]<<":";
		k=anArray.Search(nArr[i ]);
		if(k!=NOT_FOUND)
			cout<<"found at index"<<k<<endl;
		else
			cout<<"no match found"<<endl;
	}
	cout<<endl;

	anArray.Sort();

	anArray.Show("Ordered array is:");

	for(i=MAX_ELEMS-1;i>=0;i--)
	{
		cout<<"Searching for"<<nArr[i ]<<":";
		k=anArray.Search(nArr[i ]);
		if(k!=NOT_FOUND)
			cout<<"found at index"<<k<<endl;
		else
			cout<<"no match found"<<endl;
	}
	return 0;
}

⌨️ 快捷键说明

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