CPF/CPF.ReoGrid/Data/ArrayHelper.cs
2024-06-24 10:15:59 +08:00

88 lines
1.5 KiB
C#

using System;
namespace CPF.ReoGrid.Data
{
public sealed class ArrayHelper
{
public static int QuickFind(int start, int end, Func<int, int> compare)
{
return ArrayHelper.QuickFind(start + (end - start + 1 >> 1), start, end, compare);
}
public static int QuickFind(int split, int start, int end, Func<int, int> compare)
{
bool flag = split == start || split == end;
int result;
if (flag)
{
result = split;
}
else
{
int num = compare(split);
bool flag2 = num == 0;
if (flag2)
{
result = split;
}
else
{
bool flag3 = num < 0;
if (flag3)
{
int num2 = split - start + 1 >> 1;
result = ArrayHelper.QuickFind(split - num2, start, split, compare);
}
else
{
bool flag4 = num > 0;
if (flag4)
{
int num3 = end - split + 1 >> 1;
result = ArrayHelper.QuickFind(split + num3, split, end, compare);
}
else
{
result = -1;
}
}
}
}
return result;
}
public static void QuickSort(int[] n, int start, int end)
{
while (start < end)
{
int num = n[(start + end) / 2];
int i = start;
int num2 = end;
while (i >= num2)
{
while (n[i] < num)
{
i++;
}
while (n[num2] > num)
{
num2--;
}
bool flag = i >= num2;
if (flag)
{
break;
}
int num3 = n[i];
n[i] = n[num2];
n[num2] = num3;
i++;
num2--;
}
ArrayHelper.QuickSort(n, start, i - 1);
start = num2 + 1;
}
}
}
}