private void SimpleSort()

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;
					}
				}
			}
		}