69,382
社区成员
发帖
与我相关
我的任务
分享
typedef struct _data
{
int iScore;
char cName[12];
struct _data *dNext,*dPrior;
}DATA;
void SortCycleList(DATA *dPoint)
{
DATA *dLow,*dHigh;
dLow=dPoint->dNext;
dHigh=dPoint->dPrior;
QUickSort(dPoint,dLow,dHigh);
}
void QUickSort(DATA *dPoint,DATA *dLow,DATA *dHigh)
{
DATA *dCount;
while(dLow->dPrior!=dHigh&&dLow!=dHigh&&dLow->dNext!=dHigh)
{
dCount=Partition(dPoint,dLow,dHigh);
QUickSort(dPoint,dLow,dCount->dPrior);
QUickSort(dPoint,dCount->dNext,dHigh);
}
}
DATA *Partition(DATA *dPoint,DATA *dLow,DATA *dHigh)
{
int iScore;
char cName[12];
iScore=dLow->iScore;
strcpy(cName,dLow->cName);
while (dLow!=dHigh)
{
while(iScore<=dHigh->iScore&&dLow!=dHigh)
dHigh=dHigh->dPrior;
dLow->iScore=dHigh->iScore;
strcpy(dLow->cName,dHigh->cName);
while(iScore>dLow->iScore&&dLow!=dHigh)
dLow=dLow->dNext;
strcpy(dHigh->cName,dLow->cName);
dHigh->iScore=dLow->iScore;
}
dLow->iScore=iScore;
return dLow;
}
typedef struct _data
{
int iScore;
char cName[12];
struct _data *dNext,*dPrior;
}DATA;
void DATA_swap(DATA* pData1, DATA* pData2)
{
if(pData1 == pData2)
return;
int iOldData1Score = pData1->iScore;
pData1->iScore = pData2->iScore;
pData2->iScore = iOldData1Score;
char cOldData1Name[12];
memcpy(cOldData1Name, pData1->cName, 12);
memcpy(pData1->cName, pData2->cName, 12);
memcpy(pData2->cName, cOldData1Name, 12);
}
void QUickSort(DATA *dLow,DATA *dHigh);
void SortCycleList(DATA *dPoint)
{
DATA *dLow,*dHigh;
dLow=dPoint->dNext;
dHigh=dPoint->dPrior;
QUickSort(dLow,dHigh);
}
DATA *Partition(DATA *dLow,DATA *dHigh);
void QUickSort(DATA *dLow,DATA *dHigh)
{
DATA *dCount=Partition(dLow,dHigh);
if(dLow != dCount && dLow != dCount->dPrior)
QUickSort(dLow,dCount->dPrior);
if(dHigh != dCount && dHigh != dCount->dNext)
QUickSort(dCount->dNext,dHigh);
}
DATA *Partition(DATA *dLow,DATA *dHigh)
{
DATA* Mid= dLow;
int iScore = dHigh->iScore;
for (DATA* i= dLow; i != dHigh; i = i->dNext)
{
if( iScore < i->iScore)
{
DATA_swap(Mid, i);
Mid = Mid->dNext;
}
}
DATA_swap(Mid , dHigh);
return Mid;
}