[C] Selection sort si "dimentica" dei numeri?

di Anonimizzato27814 il
9 risposte
Salve! Chiedo scusa se la domanda è stata già fatta e per la mia totale ignoranza.
Volevo sapere come mai nel seguente codice il Selection Sort sembra "dimenticarsi" per strada due numeri, ovvero 50 e 31. Ho provato a cambiare i valori in array ma nulla è risolto. Sicuramente ci deve essere un problema nel calcolo che non riesco a trovare. Qualcuno potrebbe aiutarmi? Grazie!
CODICE
#include <stdio.h>

int main (void){
	int a[10] = {1,50,40,30,2,10,5,8,9,34,31};
	unsigned int i;
	unsigned int j;
	int min;
	int temp;
	
	for(i=0;i<(10-1);i++){
		min=i;
		for(j=i+1;j<10;j++){
			if(a[j]<a[min]){
				min=j;
			}
		}
		temp = a[min];
		a[min] = a[i];
		a[i] = temp;
		printf("%d ", a[i]);
	}
}
OUTPUT

9 Risposte

  • Usa i tag code per postare codice.
    Comunque i numeri che inserisci sono 11 non 10
  • Scusami! Ho modificato subito e messo il tag
    Comunque ho messo 11 numeri (dichiarando però 10) perchè, non vorrei sbagliarmi, ma sapevo che un array parte sempre da 0.

    Ho provato a rimuovere 1 numero e a cambiarne un altro, ma adesso sembra "ignorare" costantemente il 50. L'elemento più grande infatti rimane 40


    Il nuovo array
    int a[10] = {1,50,40,30,2,10,5,8,9,24};
  • Parte da zero e finisce con N-1
  • Ah ecco. Però provando a rimuovere un numero il problema persiste, quindi potrebbe essere proprio un errore nel calcolo?
  • Se non posti il codice di quello che intendi tu per "rimuovere un numero" sarà dura darti indicazioni
  • Comunque non fai la printf dell'ultimo elemento. Aggiungila fuori dal for
  • Scusami, sono stato poco chiaro perchè prima, invece di scrivere una nuova risposta, avevo modificato quella precedente in cui ho già spiegato cosa intendevo per "rimuovere un numero"

    Comunque ho risolto aggiungendo l'ultimo printf, grazie mille! Il Selection Sort già funzionava correttamente ma era solo un problema di stampa quindi
  • No. Il problema degli 11 valori era un errore grave.

    L'indice inizia da 0 ma nella dichiarazione devi indicare il numero di elementi, se sono 11 scrivi 11
  • Si, ho capito. Grazie mille!
Devi accedere o registrarti per scrivere nel forum
9 risposte