2016-08-28 1 views
0

내 지식에 따르면 quicksort는 Array.Sort() 함수가 프레임 워크에서 구현 된 이후로 가장 빠른 정렬 알고리즘 중 하나입니다. 안전하지 않은 코드와 포인터를 사용하여 바이트 배열을 빠르게 정렬하는 방법이 있습니까?안전하지 않은 코드를 사용하여 바이트 배열을 정렬하는 가장 빠른 방법은 무엇입니까?

+1

낮은 수준의 프리미티브를 사용하면 알고리즘의 복잡성이 향상되지 않습니다. – zerkms

답변

2

바이트 배열의 경우 선형 시간으로 정렬되는 Counting 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; 
} 
+0

코드에 경계 문제가있는 것 같습니다. 구현을 시도 할 때이 예외가 발생합니다. http://i.imgur.com/vzofi5W.png – yq8

+0

감사합니다. 왜 256 요소 big int []의 생성이 필요한지 설명해 주시겠습니까? 그리고 가능한 다른 조정이 있습니까? 아마도 포인터를 사용하고 있을까요? :) – yq8

+0

"아마 포인터를 사용합니다"--- 안전하지 않은 코드를 사용하면 자동으로 더 나은 결과를 내지 못합니다. 당신은 안정적으로 측정 할 수없는 것을 최적화하려고 시도하고 있습니다. 성능 최적화의 관점에서 볼 때 거의 의미가 없습니다. – zerkms