Weierstrass ha scritto:
Sicuro di aver implementato selection sort e non un altro algoritmo di ordinamento?
Ad esempio, nel vettore {5, 4, 3, 2, 1} il primo scambio dovrebbe essere tra 5 e 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DIM 5
void selection_sort(int vett[], int size);
int vettore[DIM] = {5, 4, 3, 2, 1} ;
int main()
{
int i;
srand(time(NULL));
//printf("\nVETTORE CASUALE : ");
for(i = 0; i < DIM; i++)
{
//vettore[i] = 1 + rand() % 20;
printf("%d ", vettore[i]);
}
printf("\n");
selection_sort(vettore, DIM - 1);
printf("\n\nVETTORE ORDINATO : ");
for(i = 0; i < DIM; i++)
printf("%d ", vettore[i]);
printf("\n\n");
return 0;
}
void selection_sort(int vett[], int size)
{
int prev;
if(size == 0)
return;
selection_sort(vett, size - 1);
if(vett[size] < vett[size - 1])
{
prev = vett[size];
vett[size] = vett[size - 1];
vett[size - 1] = prev;
for(prev=0;prev<DIM;prev++)
printf("%d ", vettore[prev]);
printf("\n");
}
selection_sort(vett, size - 1);
}
Hai ragione, ho implementato una versione ricorsiva di bubble sort
l'ho corretto penso che ora dovrebbe essere l'ordinamento giusto :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DIM 10
void selection_sort(int vett[], int size, int start);
int main()
{
int vettore[DIM], i;
srand(time(NULL));
printf("\nVETTORE CASUALE : ");
for(i = 0; i < DIM; i++)
{
vettore[i] = 1 + rand() % 10;
printf("%d ", vettore[i]);
}
selection_sort(vettore, DIM - 1, 0);
printf("\n\nVETTORE ORDINATO : ");
for(i = 0; i < DIM; i++)
printf("%d ", vettore[i]);
printf("\n\n");
return 0;
}
void selection_sort(int vett[], int size, int start)
{
int min = vett[size], i, index = size;
if(start == size)
return;
for(i = start; i < size; i++)
{
if(vett[i] < min)
{
min = vett[i];
index = i;
}
}
vett[index] = vett[start];
vett[start] = min;
selection_sort(vett, size, start + 1);
}
che a differenza del precedente cerca prima il minimo nel vettore, poi lo scambia con l'elemento in prima posizione e poi effettua la chimata ricorsiva. Va bene scritto così o andrebbe corretto qualcosa?