void quickSort(int *pData,int nLow,int nHigh) //递归,利用分割的结果,这就是一个不断利用分割的过程
{
if (nLow<nHigh)
{
int i=partition(pData,nLow,nHigh);
quickSort(pData,nLow,i-1);
quickSort(pData,i+1,nHigh);
}
}
void swap(int *pData,unsigned int nIndex1,unsigned int nIndex2)
{
if (nIndex1==nIndex2)
{
return;
}
int nTemp;
nTemp=pData[nIndex1];
pData[nIndex1]=pData[nIndex2];
pData[nIndex2]=nTemp;
}
//主要代码部分,一方面返回一个分割点,同时将分割点左边的数字小于分割点,分割点右边的数字大于分割点
int partition(int *pData,unsigned int nLow, unsigned int nHigh)
{
if (pData==NULL)
{
return -1;
}
int nTemp=pData[nLow];
int i=nLow;
int j=nHigh;
while(i<j)
{
while(i<j&&pData[j]>=nTemp)j--;
if (i<j)
{
swap(pData,i,j);
}
while(i<j&&pData[i]<=nTemp)i++;
if (i<j)
{
swap(pData,i,j);
}
}
return i;
}