程序修改
#include <iostream>
using namespace std;
class Sort
{
public:
SelectSort(int* pData,int Count);
InsertSort(char* nData,char mount);
private:
int iTemp;
int iPos;
char lTemp;
char lPos;
};
Sort::SelectSort(int* pData,int Count)
{
int iTemp;
int iPos;
for(int i=0;i<Count-1;i++)
{
iTemp = pData[i];
iPos = i;
for(int j=i+1;j<Count;j++)
{
if(pData[j]<iTemp)
{
iTemp = pData[j];
iPos = j;
}
}
pData[iPos] = pData[i];
pData[i] = iTemp;
}
}
Sort::InsertSort(char* nData,char mCount)
{
char lTemp;
char lPos;
for(int i=1;i<mCount;i++)
{
lTemp = nData[i];
lPos = i-1;
while((lPos>=0) && (lTemp<nData[lPos]))
{
nData[lPos+1] = nData[lPos];
lPos--;
}
nData[lPos+1] = lTemp;
}
}
void main()
{
Sort mySort;
int data[]= {10,9,8,7,6,5,4};
mySort.SelectSort(data,7);
for (int j=0;j<7;j++)
cout<<data[j]<<" ";
cout<<"\n";
char bata[]= {10,9,8,7,6,5,4};
mySort.InsertSort(bata,7);
for (int i=0;i<7;i++)
cout<<bata[i]<<" ";
cout<<"\n";
}
如何修改主函数使其变成认为输入数组元素,长度随意!bata数组为char型!各位高手帮帮忙啊!!
[解决办法]
//一个现成的你自己改改看吧, ^_^
MyData.h文件
///////////////////////////////////////////////////////
class CMyData
{
public:
CMyData(int Index,char* strData);
CMyData();
virtual ~CMyData();
int m_iIndex;
int GetDataSize(){ return m_iDataSize; };
const char* GetData(){ return m_strDatamember; };
//这里重载了操作符:
CMyData& operator =(CMyData &SrcData);
bool operator <(CMyData& data );
bool operator >(CMyData& data );
private:
char* m_strDatamember;
int m_iDataSize;
};
////////////////////////////////////////////////////////
MyData.cpp文件
////////////////////////////////////////////////////////
CMyData::CMyData():
m_iIndex(0),
m_iDataSize(0),
m_strDatamember(NULL)
{
}
CMyData::~CMyData()
{
if(m_strDatamember != NULL)
delete[] m_strDatamember;
m_strDatamember = NULL;
}
CMyData::CMyData(int Index,char* strData):
m_iIndex(Index),
m_iDataSize(0),
m_strDatamember(NULL)
{
m_iDataSize = strlen(strData);
m_strDatamember = new char[m_iDataSize+1];
strcpy(m_strDatamember,strData);
}
CMyData& CMyData::operator =(CMyData &SrcData)
{
m_iIndex = SrcData.m_iIndex;
m_iDataSize = SrcData.GetDataSize();
m_strDatamember = new char[m_iDataSize+1];
strcpy(m_strDatamember,SrcData.GetData());
return *this;
}
bool CMyData::operator <(CMyData& data )
{
return m_iIndex <data.m_iIndex;
}
bool CMyData::operator >(CMyData& data )
{
return m_iIndex>data.m_iIndex;
}
///////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//主程序部分
#include <iostream.h>
#include "MyData.h"
template <class T>
void run(T* pData,int left,int right)
{
int i,j;
T middle,iTemp;
i = left;
j = right;
//下面的比较都调用我们重载的操作符函数
middle = pData[(left+right)/2]; //求中间值
do{
while((pData[i] <middle) && (i <right))//从左扫描大于中值的数
i++;
while((pData[j]>middle) && (j>left))//从右扫描大于中值的数
j--;
if(i <=j)//找到了一对值
{
//交换
iTemp = pData[i];
pData[i] = pData[j];
pData[j] = iTemp;
i++;
j--;
}
}while(i <=j);//如果两边扫描的下标交错,就停止(完成一次)
//当左边部分有值(left <j),递归左半边
if(left <j)
run(pData,left,j);
//当右边部分有值(right>i),递归右半边
if(right>i)
run(pData,i,right);
}
template <class T>
void QuickSort(T* pData,int Count)
{
run(pData,0,Count-1);
}
void main()
{
CMyData data[] = {
CMyData(8,"xulion"),
CMyData(7,"sanzoo"),
CMyData(6,"wangjun"),
CMyData(5,"VCKBASE"),
CMyData(4,"jacky2000"),
CMyData(3,"cwally"),
CMyData(2,"VCUSER"),
CMyData(1,"isdong")
};
QuickSort(data,8);
for (int i=0;i <8;i++)
cout < <data[i].m_iIndex < <" " < <data[i].GetData() < <"\n";
cout < <"\n";
}
int main(){ Sort mySort; int intLen; int chLen; cout<<"Please input length for integer array: "; cin>>intLen; if(intLen>0) { int *data=new int[intLen]; //输入数组元素~ mySort.SelectSort(data,7); //输出数组元素 delete []data; } ... return 0;}