내 지식에 따르면 quicksort는 Array.Sort() 함수가 프레임 워크에서 구현 된 이후로 가장 빠른 정렬 알고리즘 중 하나입니다. 안전하지 않은 코드와 포인터를 사용하여 바이트 배열을 빠르게 정렬하는 방법이 있습니까?안전하지 않은 코드를 사용하여 바이트 배열을 정렬하는 가장 빠른 방법은 무엇입니까?
답변
바이트 배열의 경우 선형 시간으로 정렬되는 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;
}
코드에 경계 문제가있는 것 같습니다. 구현을 시도 할 때이 예외가 발생합니다. http://i.imgur.com/vzofi5W.png – yq8
감사합니다. 왜 256 요소 big int []의 생성이 필요한지 설명해 주시겠습니까? 그리고 가능한 다른 조정이 있습니까? 아마도 포인터를 사용하고 있을까요? :) – yq8
"아마 포인터를 사용합니다"--- 안전하지 않은 코드를 사용하면 자동으로 더 나은 결과를 내지 못합니다. 당신은 안정적으로 측정 할 수없는 것을 최적화하려고 시도하고 있습니다. 성능 최적화의 관점에서 볼 때 거의 의미가 없습니다. – zerkms
낮은 수준의 프리미티브를 사용하면 알고리즘의 복잡성이 향상되지 않습니다. – zerkms