Counting sort: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
JAnDbot (discussione | contributi)
m robot Aggiungo: cs:Counting sort
Nijeko (discussione | contributi)
Riga 53:
===[[C++]]===
<source lang="cpp">
void countingSortcounting_sort(int* A*nums, int lengthAsize)
{
//Cerca i valori minimi e massimi nell'array
//Cacolo degli elementi max e min
int i, min = nums[0], max = min;
int max=A[0];
for(i =0 1; i <lengthA size; i++i)
int min=A[0];
}{
int i=1;
if (nums[i] < min)
for(; i<lengthA; i++){
min = nums[i];
if(A[i]>max) max=A[i];
else if (Anums[i]<min > max) min=A[i];
max = nums[i];
}
}
//Costruzione dell'array C
int lengthC=max-min+1;
//Crea un array per contare (come nel bucket sort)
int C[lengthC]; //crea l'array C
int distinct_element_count = max - min + 1;
for(i=0; i<lengthC; i++) C[i]=0; //inizializza a zero gli elementi di C
int* counts = new int[distinct_element_count];
for(i=0; i<lengthA; i++)
for(i=0; i<distinct_element_count; ++i)
C[A[i]-min]++; //aumenta il numero di volte che si è incontrato il valore
counts[i] = 0;
//Ordinamento in base al contenuto dell'array delle frequenze C
int k=0; //indice per l'array A
//Per ogni valore nell'array da ordinare
for(i=0; i<lengthC; i++){
//aumenta di 1 il corrispondente elemento nell'array di conteggio
int valore=i+min;
//(Esattamente come nel bucket sort)
while(C[i]>0){ //scrive C[i] volte il valore nell'array A
for(i=0; i<lengthCsize; i++i){
A[k]=i+min;
++counts[ nums[i] - min ];
k++;
C[i]--;
//Inserisce nell'array principale i valori contati
}
int maxj=A[0];
}
for(i=min; i<lengthA=max; i++){
}
for(int z=0; z<counts[i-min]; z++)
nums[j++] = i;
}
</source>