Mam następujący kod, ale to działa tylko na unsigned int a moim celem jest napisanie kodu, który będzie działał na wszystkich int ...Korzystanie z liczenia sortowania na wartości ujemne?
void CountingSort(vector<int> & a, vector<int> & b)
{
int k=*max_element(a.begin(),a.end());
k++;
vector <int> c(k);
for (int i=0;i<a.size();i++)
c[a[i]]++;
for (int i=1;i<k;i++)
c[i]=c[i]+c[i-1];
for (int i=0;i<a.size();i++)
{
b[c[a[i]]-1]=a[i];
c[a[i]]--;
}
}
Jak mogę to zmienić, aby pracować dla wszystkich integralnych typów?
Należy też stwierdzić, że wejście ('A') nie są puste lub nie-op, że sprawa. W przeciwnym razie program ulegnie awarii, gdy najmniej się go spodziewasz. –
Zazwyczaj dobrym pomysłem jest pozostawienie sprawdzonych algorytmów pracy w stanie nienaruszonym i transformacja wejścia i wyjścia. Chyba że służy do nauki i majsterkowania: D –