int vettore[M] = {0};
= {0} rallenta il codice, perché questo vettore lo sovra-scriverai totalmente e quindi è inutile inizializzarlo
for(int i = 0; i < M; i++)
bucket[vettore[i]]++;
for(int i = 0; i < N; i++)
i è meglio se la dichiari fuori se la devi usare in due for diversi
if(bucket[i] > 0)
{
for(int j = 0; j < bucket[i]; j++)
if(bucket[ i ] > 0) è inutile, perché se bucket[ i ] == 0 comunque esci subito dal for dopo aver inizializzato j
vettore[count] = i;
count++;
lo puoi semplicemente scrivere come vettore[count++] = i;
Quindi, in conclusione
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M 20
#define N 100
void bucket_sort(int vettore[]);
int main()
{
int vettore[M];
srand(time(NULL));
printf("\nVETTORE CASUALE : ");
for(int i = 0; i < M; i++)
printf("%d ", vettore[i] = 1 + rand() % N);
bucket_sort(vettore);
printf("\n\nVETTORE ORDINATO : ");
for(int i = 0; i < M; i++)
printf("%d ", vettore[i]);
printf("\n\n");
return 0;
}
void bucket_sort(int vettore[])
{
int i, bucket[N] = {0}, count = 0;
for(i = 0; i < M; i++)
bucket[vettore[i]]++;
for(i = 0; i < N; i++)
for(int j = 0; j < bucket[i]; j++)
vettore[count++] = i;
}
Che poi, in realtà, la variabile count non serve
void bucket_sort(int vettore[])
{
int i, j, bucket[N] = {0};
for(i = 0; i < M; i++)
bucket[vettore[i]]++;
for(i = 0; i < N; i++){
for(j = 0; j < bucket[i]; j++)
vettore[j] = i;
vettore += j;
}
}