in src/ICSharpCode.SharpZipLib/BZip2/BZip2OutputStream.cs [1022:1106]
private void SimpleSort(int lo, int hi, int d)
{
int i, j, h, bigN, hp;
int v;
bigN = hi - lo + 1;
if (bigN < 2)
{
return;
}
hp = 0;
while (increments[hp] < bigN)
{
hp++;
}
hp--;
for (; hp >= 0; hp--)
{
h = increments[hp];
i = lo + h;
while (true)
{
/*-- copy 1 --*/
if (i > hi)
break;
v = zptr[i];
j = i;
while (FullGtU(zptr[j - h] + d, v + d))
{
zptr[j] = zptr[j - h];
j = j - h;
if (j <= (lo + h - 1))
break;
}
zptr[j] = v;
i++;
/*-- copy 2 --*/
if (i > hi)
{
break;
}
v = zptr[i];
j = i;
while (FullGtU(zptr[j - h] + d, v + d))
{
zptr[j] = zptr[j - h];
j = j - h;
if (j <= (lo + h - 1))
{
break;
}
}
zptr[j] = v;
i++;
/*-- copy 3 --*/
if (i > hi)
{
break;
}
v = zptr[i];
j = i;
while (FullGtU(zptr[j - h] + d, v + d))
{
zptr[j] = zptr[j - h];
j = j - h;
if (j <= (lo + h - 1))
{
break;
}
}
zptr[j] = v;
i++;
if (workDone > workLimit && firstAttempt)
{
return;
}
}
}
}