首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

程序修改解决办法

2012-02-14 
程序修改#include iostreamusing namespace stdclass Sort{public:SelectSort(int* pData,int Count)I

程序修改
#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型!各位高手帮帮忙啊!!









[解决办法]

C/C++ code
 
//一个现成的你自己改改看吧, ^_^
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";
}


[解决办法]
动态分配释放new/delete就能做到了吧
C/C++ code
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;} 

热点排行