各种排序算法的稳定性和时间复杂度小结(4)

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";
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/283c4a182c3e4b487474192bbb39f052.html