Реализации алгоритмов/Сортировка/Поразрядная: различия между версиями

Содержимое удалено Содержимое добавлено
→‎Lua: поправил отступы
Добавил C# реализацию
Строка 227:
end
</syntaxhighlight>
 
== C# ==
<syntaxhighlight lang="C#">
//Поразрядная сортировка с поддержкой отрицательных чисел
public class RadixSort
{
public static long[] SortL(long[] arr)
{
if (arr == null || arr.Length == 0)
return arr;
 
int i, j;
var tmp = new long[arr.Length];
for (int shift = sizeof(long)*8 - 1; shift > -1; --shift)
{
j = 0;
for (i = 0; i < arr.Length; ++i)
{
var move = (arr[i] << shift) >= 0;
if (shift == 0 ? !move : move)
arr[i - j] = arr[i];
else
tmp[j++] = arr[i];
}
Array.Copy(tmp, 0, arr, arr.Length - j, j);
}
 
return arr;
}
}
 
//Юнит-тест
[Theory]
[InlineData(new long[] { })]
[InlineData(new long[] { 1 })]
[InlineData(new long[] { long.MaxValue, 1, 2, 3, long.MinValue })]
[InlineData(new long[] { 1, 1, 1 })]
[InlineData(new long[] { 3, 2, int.MaxValue, 3 })]
[InlineData(new long[] { 3, 2, 1 })]
[InlineData(new long[] { 1, 2, 3, 1 })]
[InlineData(new long[] { -1, 123, 5, 7, 4000, 8, 567, 987, 311, 900, 0, -1 })]
[InlineData(new long[] { -1, 123, 5, 7, 4000, 8, 567, 987, 311, 900, 0, -1, 311 })]
[InlineData(new long[] { 1, 5, 1, 2, 10, 6, 9, 8, 3, 7, 4 })]
[InlineData(new long[] { 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4 })]
public void Test(long[] arr)
{
var res = RadixSort.SortL((long[])arr.Clone());
 
Assert.Equal(arr.OrderBy(x => x), res);
}
</syntaxhighlight>
 
 
{{BookCat | filing = deep}}