1,字典序的算法:
const int iNcout = 8;
int iDArray[iNcout] = {1 , 4, 3, 8, 7, 5, 2, 0};
int FindFirstIndex(int a[], int index)
{
int iResult=-1;
for (int i = index ; i >=0 ; i-- )
{
if (a[i] < a [i +1] )
{
iResult = i ;
break;
}
}
return iResult;
}
int FindBehindMin(int a[], int index)
{
int iResult = -1;
for (int i = iNcout -1; i > index ; i--)
{
if (a[i] > a[index])
{
iResult = i;
break;
}
}
return iResult;
}
void SwapV(int a[], int Left, int Right)
{
int temp = a[Left];
a[Left] = a[Right];
a[Right] = temp;
}
int icounttime = 0;
while (iDArray[0] <iDArray[1])
{
iFirstMin = FindFirstIndex(iDArray, iNcout-2);
if (iFirstMin <0)
{
break;
}
iBehindMin = FindBehindMin(iDArray, iFirstMin);
SwapV(iDArray, iFirstMin, iBehindMin);
int temp[iNcout];
for (int n = 0; n < iNcout-iFirstMin -1; n++)
{
temp[n] =iDArray[iNcout-1-n];
}
for (int id = iFirstMin+1, iLast = 0; id < iNcout; id++)
{
iDArray[id] = temp[iLast];
iLast++;
}
for (int t = 0; t<= iNcout -1; t++)
{
cout << iDArray[t];
}
cout <<endl;
icounttime++;
}