Ciao a tutti, sono nuovo del forum e ho subito una domanda da farvi, è una modifica al selection sort in modo che mi elimini gli eventuali doppioni che un utente puo' inserire nel vettore, esempio:
Input:
10 10 10 10 10 9 9 8 7 6 5 5
output
5 6 7 8 9 10
La funzione che devo modificare è selectionsort() ecco il codice del programma intero la funzione che deve essere modificata è l'ultima ed è commentata riga x riga.
Selection sort prende il numero minimo è lo sposta nella prima celle dall'array a[0] e man mano espande la parte sx dell'array (contrario del bubble sort) con i valori in ordine crescente.
Il codice:
codice:
#include<stdio.h>
#define SIZE 10
void insert(int[], int);
void selectionsort(int[], int);
void stampa(int[], int);
int a[SIZE];
int main()
{
int i, j;
insert(a, SIZE);
printf("Array Originale:\n");
stampa(a, SIZE);
selectionsort(a, SIZE);
printf("\n\nStampo l'array ordinato:\n");
stampa(a, SIZE);
printf("\n");
return 0;
}
/**
@params: a = Vettore
size = dimensione
*/
void stampa(int *a, int size)
{
int i;
for(i = 0; i < size; i++)
{
printf("%d ", a[i]);
}
}
/**
@params: a = Vettore
size = dimensione
*/
void insert(int *a, int size)
{
int i = 0;
for(i = 0; i < size; i++)
{
printf("Inserisci il valore in posisione %d: " ,i);
scanf("%d", &a[i]);
}
}
void selectionsort(int *a, int size)
{
int i, j, min, p;
//primo ciclo esterno for da 0 a size-1
for(i = 0; i < size - 1; ++i)
{
//assena a min il valore dell'array
min= a[i];
// memorizza l'indice nella va p
p = i;
ciclo for interno da i+1(x' il min si trova gia' in a[0]) a size
for(j = i + 1; j < size; ++j)
{
//se il valore dopo è < di quello prima inverti
if (a[j] < min)
{
min = a[j];
p = j;
}
}
a[p]=a[i];
a[i]=min;
}
Le 2 funzioni insert() e stampa() permettono la prima l'inserimento dei dati nel vettore (l'utenete Deve avere la possibilità di inserire i doppi, quindi non va modificata), la seconda stampa a video i dati contenuti nell'array.
Vi prego aiutatemi sono alle primissime armi con la programmazione e sono spiazzato!
Grazie a tutti