해시를 사용하여 배열 int a[];
을 정렬하는 간단한 함수를 작성했습니다. 그 때문에 새로운 배열 hash1[]
에있는 모든 요소에 대한 빈도를 저장 한 다음 선형 시간으로 원래 배열에 다시 넣습니다.해싱을 사용하여 배열을 정렬하면 성능상으로 어떤 단점이 있습니까?
#include<bits/stdc++.h>
using namespace std;
int hash1[10000];
void sah(int a[],int n)
{
int maxo=-1;
for(int i=0;i<n;i++)
{
hash1[a[i]]++;
if(maxo<a[i]){maxo=a[i];}
}
int i=0,freq=0,idx=0;
while(i<maxo+1)
{
freq=hash1[i];
if(freq>0)
{
while(freq>0)
{
a[idx++]=i;freq--;
}
}
i++;
}
}
int main()
{
int a[]={6,8,9,22,33,59,12,5,99,12,57,7};
int n=sizeof(a)/sizeof(a[0]);
sah(a,n);
for(int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
}
이 알고리즘은 O (max_element)에서 실행됩니다. 성능 (시간과 공간)만을 고려할 때 내가 직면 한 단점은 무엇입니까? 당신이 고려할 수 있습니다