这段时间借口太多了,说要搞这个,搞那个。最后什么都没搞出来,帮人家搞了很多东西。自己的东西都不知道在哪里,准备好写点东西,网上东走西看,一点东西都没搞出来。周末的时间基本被人家定了,上课,帮人家买电脑,帮人家搞程序。哇,写作业的时候才发现,好久没看学校发的书了。小边说要出来,昨晚没怎么睡,心情一直很乱,不知道想什么子东西。大学学的太多,应用的很少,业余学的用处不少。因为学的太杂,质量不高。所以我在我们学校是个伪人才,不怕自己打击自己,因为是事实吧。这两周要努力去写完那点东西,还要跟华七七搞英文站,都不知道怎么去搞,英文太差,所以一直在学。小边的事也许我是自己烦自己吧。把小边实验室要求要写的C++几种排序的代码放出来看吧。小边没叫我帮忙,因为我不会。这个也不是我写的,是一高手帮别人写的,然后人家拿来请教我。我讲解了一会,之后那人就不见了。
// MySort.h: interface for the CMySort class.
//
//////////////////////////////////////////////////////////////////////#if !defined(AFX_MYSORT_H__A85E5CA1_77B0_4144_B5BF_2997EADB4B16__INCLUDED_)
#define AFX_MYSORT_H__A85E5CA1_77B0_4144_B5BF_2997EADB4B16__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <windows.h>
#include <stdlib.h>
#include <time.h>#define _AUTOTEST_OPEN // 自测试开关 注释掉这个就关闭自测试
template <class T, int nLen>
class CMySort
{
public:
CMySort();
virtual ~CMySort();
void dce();
protected:
T* m_data;
int m_nLen;
protected:
//输出函数
void Output(int n);
void mergesort();
//两路合并排序
void Merge(int i1,int j1,int i2,int j2);
void Quicksort();
//快速排序
void Quick(int s,int t);
void SWAP(T &a,T &b);
//插入排序
void InsertSort();
//选择排序
void SelectSort();
// 冒泡排序
void Popsort();
};//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////template<class T, int nLen>
CMySort<T, nLen>::CMySort()
{
m_data=new T[nLen];
m_nLen = nLen;
}template <class T, int nLen>
CMySort<T, nLen>::~CMySort()
{
delete[] m_data;
m_data = NULL;
}// 冒泡排序
template <class T, int nLen>
void CMySort<T, nLen>::Popsort()
{
T temp;
int i,j;
for(i=0;i<nLen;i++)
for(j=i+1;j<nLen;j++)
{
if(m_data[i]>m_data[j])
{
temp=m_data[i];
m_data[i]=m_data[j];
m_data[j]=temp;
}
}
}//选择排序
template <class T, int nLen>
void CMySort<T, nLen>::SelectSort()
{
T temp;
int inLen;
for(int i=0;i<nLen-1;i++)
{
temp = m_data[i];
inLen = i;
for(int j=i+1;j<nLen;j++)
{
if(m_data[j]<temp)
{
temp = m_data[j];
inLen = j;
}
}
m_data[inLen]=m_data[i];
m_data[i]=temp;
}
}
//插入排序
template <class T, int nLen>
void CMySort<T, nLen>::InsertSort()
{
T temp;
int i,i_flag;
for(i=1;i<nLen;i++)
{
temp = m_data[i];
i_flag = i;
while((i_flag>0)&&(temp<m_data[i_flag-1]))
{
m_data[i_flag]=m_data[i_flag-1];
i_flag--;
}
m_data[i_flag]=temp;
}
}
template <class T, int nLen>
void CMySort<T, nLen>::SWAP(T &a,T &b)
{
T temp;
temp=a;
a=b;
b=temp;
}
//快速排序
template <class T, int nLen>
void CMySort<T, nLen>::Quick(int s,int t)
{
int i,j;
if(s<t)
{
i=s;
j=t+1;
while(1)
{
do i++;
while(!(m_data[s]<=m_data[i]||i==t));
do j--;
while(!(m_data[s]>=m_data[j]||j==s));
if(i<j)
SWAP(m_data[i],m_data[j]);
else
break;
}
SWAP(m_data[s],m_data[j]);
Quick(s,j-1);
Quick(j+1,t);
}
}
template <class T, int nLen>
void CMySort<T, nLen>::Quicksort()
{
Quick(0,nLen-1);
}
//两路合并排序
template <class T, int nLen>
void CMySort<T, nLen>::Merge(int i1,int j1,int i2,int j2)
{
T *temp=new T[j2-i1+1];
int i=i1,j=i2,k=0;
while(i<=j1&&j<=j2)
if(m_data[i]<m_data[j])
temp[k++]=m_data[i++];
else
temp[k++]=m_data[j++];
while(i<=j1)
temp[k++]=m_data[i++];
while(j<=j2)
temp[k++]=m_data[j++];
for(i=0;i<k;i++)
m_data[i1++]=temp[i];
delete[] temp;
}
template <class T, int nLen>
void CMySort<T, nLen>::mergesort()
{
int i1,j1,i2,j2;
int size=1;
while(size<nLen)
{
i1=0;
while(i1+size<nLen)
{
i2=i1+size;
j1=i2-1;
if(i2+size-1>nLen-1)
j2=nLen-1;
else
j2=i2+size-1;
Merge(i1,j1,i2,j2);
i1=j2+1;
}
size*=2;
}
}
//输出函数
template <class T, int nLen>
void CMySort<T, nLen>::Output(int n)
{
int i;
switch(n)
{
case 1: Popsort(); break;
case 2
: SelectSort(); break;
case 3: InsertSort(); break;
case 4: Quicksort(); break;
case 5: mergesort(); break;
}
for(i=0;i<nLen;i++)
cout<<m_data[i]<<" ";
cout<<endl;
}
template<class T, int nLen>
void CMySort<T, nLen>::dce()
{
#ifdef _AUTOTEST_OPEN
srand((unsigned int)time(NULL));
int i;
int j;if (typeid(double*) == typeid(m_data))
{
for (i=0; i<nLen; i++)
{
m_data[i] = ((double)(rand()%1000+1))/10.0;
cout<<m_data[i]<<" ";
}
}
else if (typeid(char*) == typeid(m_data))
{
for (i=0; i<nLen; i++)
{
m_data[i] = rand()%26+'A';
cout<<m_data[i]<<" ";
}
}
else if (typeid(string*) == typeid(m_data))
{
for (i=0; i<nLen; i++)
{
int nRandLen = rand()%6+3;
for (j=0; j<nRandLen; j++)
{
m_data[i] += rand()%26+'A';
}
cout<<m_data[i]<<" ";
}
}
else
{
return;
}
cout<<endl;cout<<"1:冒泡排序"<<endl;
Output(1);
cout<<"2:选择排序"<<endl;
Output(2);
cout<<"3:插入排序"<<endl;
Output(3);
cout<<"4:快速排序"<<endl;
Output(4);
cout<<"5:两路合并排序"<<endl;
Output(5);
#else
cout<<"输入"<<nLen<<"个:";
for(int r=0;r<nLen;r++)
cin>>m_data[r];
int n;
cout<<"1:冒泡排序"<<endl;
cout<<"2:选择排序"<<endl;
cout<<"3:插入排序"<<endl;
cout<<"4:快速排序"<<endl;
cout<<"5:两路合并排序"<<endl;
cin>>n;
Output(n);
#endif
}#endif // !defined(AFX_MYSORT_H__A85E5CA1_77B0_4144_B5BF_2997EADB4B16__INCLUDED_)
太长了就不贴出来了,看了主要的代码,需要的应该可以写出其它的部分。
打包一下,自己下吧:201003212158347867.rar
借口有时候可以适当缓解自己的压力。时间有时候多留给自己一些
C++ 已经好多年没碰了。
我是越来越堕落了
多做实事,少找借口
看不懂代码~
看来我来得还挺勤快的嘛...
博主还没更新,来催了
这些排序算法都很经典啊
无视代码。。。
感谢分享,不过我不会技术
说道帮忙……让我想到了某个WAP半成品……==……咱不急就是……
853