1, 直接插入排序
void insertSort(int *pData, int nCount)
{
if (NULL == pData)
return ;
if (nCount <= 1)
return ;
for (int i = 1; i < nCount; ++i)
{
for (int j = i; j >= 1; --j)
{
if (pData[j] < pData[j - 1])
{
int nTemp = pData[j - 1];
pData[j - 1] =pData[j];
pData[j] = nTemp;
}
}
}
}
2.选择排序
void selectSort(int *pData, int nCount)
{
if(pData == NULL)
return ;
if (nCount <=1)
return ;
int nTemp(0);
int iPos(0);
for (int i = 0; i < nCount - 1; ++i)
{
int nTemp = pData[i];
iPos = i;
for (int j = i + 1; j < nCount; ++j)
{
if (pData[j] < nTemp)
{
nTemp = pData[j];
iPos = j;
}
}
pData[iPos] = pData[i];
pData[i] = nTemp;
}
}
void quickSort(int *p, int nBegin, int nEnd)
{
if (p == NULL)
return;
if (nBegin >= nEnd)
return ;
int i = nBegin + 1;
int nCurrPos = nBegin;
int j = nEnd - 1;
bool bDesc(true);
while (i<=j)
{
if (bDesc)
{
if (p[j] < p[nCurrPos])
{
int nTemp = p[nCurrPos];
p[nCurrPos] = p[j];
p[j] = nTemp;
nCurrPos = j;
bDesc = false;
}
--j;
}
else
{
if (p[i] > p[nCurrPos])
{
int nTemp = p[nCurrPos];
p[nCurrPos] = p[i];
p[i] = nTemp;
nCurrPos = i;
bDesc = true;
}
++i;
}
}
quickSort(p,nBegin,nCurrPos);
quickSort(p,nCurrPos + 1,nEnd);
}
4,希尔排序
void shellSort(int *p, int nCount)
{
if (NULL == p)
return ;
if (nCount <= 1)
return ;
for (int nStep = nCount/2; nStep >= 1; nStep = nStep/2)
{
for (int i = 0; i < nStep; ++i)
{
for (int j = i + nStep; j < nCount; j += nStep)
{
for (int k = j; k - nStep >= i; k -= nStep)
{
if (p[k] < p[k - nStep])
{
int nTemp = p[k];
p[k] = p[k - nStep];
p[k - nStep] = nTemp;
}
}
}
}
}
}
以上排序本人都已亲测,如有错误,欢迎大家指正!