Ich schrieb eine einfache Funktion, um ein Array int a[];
mit Hash zu sortieren. Dafür habe ich die Frequenz für jedes Element im neuen Array hash1[]
gespeichert und dann in der linearen Zeit in das ursprüngliche Array zurückgelegt.Welche Nachteile gibt es leistungsmäßig, wenn ich ein Array mit Hashing sortiere?
#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]);
}
}
Dieser Algorithmus läuft in O (max_element). Welche Art von Nachteilen habe ich hier nur hinsichtlich der Leistung (Zeit und Raum)?