Problema con selection sort

di il
4 risposte

Problema con selection sort

Salve a tutti, ho questo problema:
ho scritto per risolvere diversi esercizi alcuni codici per ordinare dei vettori secondo il metodo selection sort. Premetto che i codici mi hanno funzionato. Quando, dovendo risolvere un esercizio un po' più complesso (dovevo ordinare due vettori) mi sono accorto che il programma non ordina il secondo vettore e non riesco a trovare l'errore. Posto qui sotto il frammento di codice.
#include<stdio.h>
#include<stdlib.h>
#define N 5

int main(){
	int j, l, v2[N]={15,29,13,3,12}, temp2, posm2, max2;
	
	for(j=0; j<N-1; j++){
		max2=v2[j];
		
		for(l=j; l<N; l++){
			if(v2[l]>max2){
			   max2=v2[l];
			   posm2=l;	
			}
		}
	
	temp2=v2[j];
	v2[j]=v2[posm2];
	v2[posm2]=temp2;
	
	}
	for(l=0; l<N; l++){
		printf("v2=%d \n", v2[l]);
	}
	return 0; 
		
} 
Il programma mi stampa a video:
29
13
15
12
3

Quindi non ordinato. Qual'è il problema?

Ringrazio in anticipo!

4 Risposte

  • Re: Problema con selection sort

    for(j=0; j<N-1; j++){
    		max2=v2[j];
    
    e va bene, ma posm2 a cosa corrisponde? Nella terza iterazione del primo ciclo per esempio, chi è posm2 e chi è max2?
    Un consiglio, usa solo l'indice per tenere traccia del massimo.
  • Re: Problema con selection sort

    Indica la posizione del massimo
  • Re: Problema con selection sort

    Ma non sempre corrisponde col valore di max2.
  • Re: Problema con selection sort

    Si fa solo con l'indice come ti ha detto
    
    for(j=0; j<N-1; j++){
    		posm2=j;
    		for(l=j+1; l<N; l++)
    			if(v2[l]>v2[posm2])
    			   posm2=l;	
    
Devi accedere o registrarti per scrivere nel forum
4 risposte