C# 使用不安全代码对字节数组排序的最快方法?

C# 使用不安全代码对字节数组排序的最快方法?,c#,sorting,unsafe,C#,Sorting,Unsafe,据我所知,快速排序是最快的排序算法之一,因为这就是Array.Sort()函数在框架中的实现方式。 有没有一种方法可以加快字节数组的排序速度,可能是使用不安全的代码和指针?对于字节数组,你可以考虑,,这是线性时间的排序。 public static void Sort(byte[] a) { int[] counts = new int[256]; for (int i = 0; i < a.Length; i++) counts[a[i]]++;

据我所知,快速排序是最快的排序算法之一,因为这就是Array.Sort()函数在框架中的实现方式。
有没有一种方法可以加快字节数组的排序速度,可能是使用不安全的代码和指针?对于字节数组,你可以考虑,

,这是线性时间的排序。

public static void Sort(byte[] a)
{
    int[] counts = new int[256];
    for (int i = 0; i < a.Length; i++)
        counts[a[i]]++;
    int k = 0;
    for (int i = 0; i < counts.Length; i++)
        for (int j = 0; j < counts[i]; j++)
            a[k++] = (byte)i;
}
公共静态无效排序(字节[]a)
{
int[]计数=新的int[256];
for(int i=0;i对于字节数组,<>代码> 可以考虑,这是线性时间的排序。

public static void Sort(byte[] a)
{
    int[] counts = new int[256];
    for (int i = 0; i < a.Length; i++)
        counts[a[i]]++;
    int k = 0;
    for (int i = 0; i < counts.Length; i++)
        for (int j = 0; j < counts[i]; j++)
            a[k++] = (byte)i;
}
公共静态无效排序(字节[]a)
{
int[]计数=新的int[256];
for(int i=0;i
使用低级原语不会提高算法的复杂性。使用低级原语不会提高算法的复杂性。您的代码似乎存在边界问题。我在尝试您的实现时遇到了一个例外:这个很有效,谢谢。您能解释一下为什么需要创建256个元素的大int[]吗?还有其他可能的调整吗,-可能是使用指针吗?:)“可能使用指针”——使用不安全的代码并不能自动使任何事情变得更好。您试图优化无法可靠测量的内容,从性能优化的角度来看,这没有什么意义。计数排序利用了阵列中可能的值数量有限的事实(在我们的示例中为256个)。在第一个过程中,我们只计算有多少个零、多少个一、多少个二等。在第二个过程中,我们放置相应的数字或零、一、二等。您的代码似乎存在边界问题。我在尝试您的实现时遇到了一个例外:这个很有效,谢谢。您能解释一下为什么需要创建256个元素的大int[]吗?还有其他可能的调整吗,-可能是使用指针吗?:)“可能使用指针”——使用不安全的代码并不能自动使任何事情变得更好。您试图优化无法可靠测量的内容,从性能优化的角度来看,这没有什么意义。计数排序利用了阵列中可能的值数量有限的事实(在我们的示例中为256个)。在第一次过程中,我们只计算有多少个零,多少个一,多少个二等。在第二次过程中,我们放置相应的数字或零,一,二等。