¸÷ÖÖÅÅÐòËã·¨µÄÎȶ¨ÐÔºÍʱ¼ä¸´ÔÓ¶ÈС½á

ðÅÝ O(n2) O(n2) Îȶ¨ O(1) nСʱ½ÏºÃ ½»»» O(n2) O(n2) ²»Îȶ¨ O(1) nСʱ½ÏºÃ Ñ¡Ôñ O(n2) O(n2) ²»Îȶ¨ O(1) nСʱ½ÏºÃ ²åÈë O(n2) O(n2) Îȶ¨ O(1) ´ó²¿·ÖÒÑÅÅÐòʱ½ÏºÃ »ùÊý O(logRB) O(logRB) Îȶ¨ O(n) B ÊÇÕæÊý(0-9)£¬

RÊÇ»ùÊý(¸öÊ®°Ù)

Shell O(nlogn) O(ns) 1

ÒÔÏÂÊÇÒ»¸ö»ùÓÚÄ£°åµÄͨÓÃÅÅÐò£º

Õâ¸ö³ÌÐòÎÒÏë¾ÍûÓзÖÎöµÄ±ØÒªÁË£¬´ó¼Ò¿´Ò»Ï¾ͿÉÒÔÁË¡£²»Ã÷°×¿ÉÒÔÔÚÂÛ̳ÉÏÎÊ¡£ 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

bool CMyData::operator >(CMyData& data ) {

return m_iIndex>data.m_iIndex; }

///////////////////////////////////////////////////////////

////////////////////////////////////////////////////////// //Ö÷³ÌÐò²¿·Ö

#include #include \

template

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]

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

run(pData,left,j);

//µ±Óұ߲¿·ÖÓÐÖµ(right>i)£¬µÝ¹éÓÒ°ë±ß if(right>i)

run(pData,i,right); }

template

void QuickSort(T* pData,int Count) {

run(pData,0,Count-1); }

void main() {

CMyData data[] = { CMyData(8,\ CMyData(7,\ CMyData(6,\ CMyData(5,\ CMyData(4,\ CMyData(3,\ CMyData(2,\ CMyData(1,\ };

QuickSort(data,8); for (int i=0;i<8;i++)

cout<

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@)