// Sort.h:interface for the CSort class. // ///////////////////////////////////////////////////////////////////////////// #if !defined(AFX_SORT_H__A188801C_AC96_4A65A800_119AE5E5C08F__INCLUDED_) #define AFX_SORT_H__A188801C_AC96_4A65A800_119AE5E5C08F__INCLUDED_ #IF _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 template class CSort { public: CSort(int nArraySize); virtual ~CSort(); void Bubble(T array[]); //冒泡排序 void Insertion(T array[]); void Quick(T array[],int nLeftLimit,int nRightLimit); void Selection(T array[]); private: int m_nArraySize; }; template CSort::CSort(int nArraySize) { if(nArraySize<0) m_nArraySize=0; else m_nArraySize=nArraySize; } template CSort~CSort() { } template CSort::Bubble(T array[]) { T temp; int nLast=m_nArraySize-1; BOOL bSorted=TRUE; do { bSorted=TRUE; for(int i=0;iarray[i+1]) { temp=array[i]; array[i]=array[i+1]; array[i+1]=temp; bSorted=FALSE; } } nLast--; } while(!bSorted); } template void CSort::Insertion(T array[]) { T cVal; //current value being examined for(int i=1;i0&&cVal void CSort::Quick(T array[],int llimit,int rlimit) { T temp; int nLeft=llimit; int nRight=rlimit; int pivot=(nLeft+nRight)/2; T nMedian=array[pivot]; do { while ((array[nLeft]llimit)) { nRight--; } if (nLeft<=nRight) { //交换元素 temp=array[nRight]; array[nLeft]=array[nRight]; array[nRight]=temp; nLeft++; nRight--; } } while(nLeft<=nRight); if (llimit::Quick(array,llimit,nRight); } if (nLeft::Quick(array,nLeft,rlimit); } } template void CSort::Selection(T array[]) { T temp; int min; for(int i=0;i