Esercizio con selection sort

di il
4 risposte

Esercizio con selection sort

Sto provando a svolgere alcuni esercizi presenti nel manuale
mi sono bloccato su un algoritmo, la traccia dice :
dati 3 vettori, con elementi da caricare da 3 file, generare un 4°file che contenga tutti gli elementi dei 3 vettori, ordinati crescentemente, si proceda senza fare uso di un quarto vettore e usando l'algoritmo del selection sort.

ora non so se esiste (evidentemente si) una strada più corta, ma io sto procedendo nel seguente modo:
così mi sono caricato i file nei vettori v1,v2,v3:
#include "func.h"

void inserisciInVettori(   vettore & v1, int & r1,     vettore & v2, int & r2,     vettore & v3 , int & r3   ){
	
	fstream in1, in2, in3;
	in1.open("/Users/Genna/Desktop/fondamenti di informatica/file/eser pag 358/f1.txt",ios::in);
	in2.open("/Users/Genna/Desktop/fondamenti di informatica/file/eser pag 358/f2.txt",ios::in);
	in3.open("/Users/Genna/Desktop/fondamenti di informatica/file/eser pag 358/f3.txt",ios::in);
	
	r1=0;
	r2=0;
	r3=0;
	
	while(!in1.eof()){
		in1>>v1[r1];
		r1++;
	}
	while(!in2.eof()){
		in2>>v2[r2];
		r2++;
	}
	while(!in3.eof()){
		in3>>v3[r3];
		r3++;
	}
	
	r1--;
	r2--;
	r3--;
	
	
	in1.close();
	in2.close();
	in3.close();
	
	for (int i=0;i<r1;i++)
		cout<<v1[i]<<" ";
	
	cout<<endl;
	
	for (int j=0;j<r2;j++)
			cout<<v2[j]<<" ";
	
	cout<<endl;
	
	for (int k=0;k<r3;k++)
			cout<<v3[k]<<" ";
	
	cout<<endl;
	
}
in questa procedura invece sto cercando di capire come fare per ordinare sti benedetti vettori,
avevo pensato di costruire tre cifri for uno dentro l'altro, ma in realtà non ho in testa con che algoritmo finire, sto girando in tondo, ho bisogno di un cosiglio



void calcolo(   vettore  v1, int  r1,     vettore  v2, int  r2,     vettore  v3 , int  r3   ){
	
	ofstream out;
	//creo il file di uscita contenente i vettori ordinati
	out.open("/Users/Genna/Desktop/fondamenti di informatica/file/eser pag 358/out.txt",ios::app);
	
	int riempimento[3]={r1,r2,r3};
	int max = 0;
	for (int i=0;i<3;i++)
		if (max<riempimento[i])
			max=riempimento[i];
	cout<<"\nRiempimento massimo : "<<max;
	int min=max;
	for(int j=0;j<3;j++)
		if (min>riempimento[j])
			min=riempimento[j];
	cout<<"\nRiempimento minimo : "<<min;
	cout<<endl;
	int med;
	
	
	//capisco qual'è il riempimento maggiore , medio e minore per i cicli successivi
	if((r1 != min) && (r1 !=max)){
		med=r1;
	if((r2 != min) && (r2 !=max))
		med=r2;
	if((r3 != min) && (r3 !=max))
		med=r3;
	//qui iniziano i 3 cicli
	for(int M=0;M<max;M++){
		for(int me=0;me<med;me++){
				for(int m=0;m<min;min++)
				{
				
				}
		}
	}


}
:

4 Risposte

  • Re: Esercizio con selection sort

    Da wikipedia
    
    procedure SelectionSort(a: lista dei numeri da ordinare);
      for i = 1 to n - 1
        posmin ? i
        for j = (i + 1) to n
          if a[j] < a[posmin]
            posmin ? j
        aus ? a[i]
        a[i] ? a[posmin]
        a[posmin] ? aus
    
    
    non riesci a trasformarlo in C++?
    Poi mi aspetterei che in questo momento sapessi già creare delle funzioni. Come vedi la funzione per caricare i dati da file è la stessa per tutti e 3. non sarebbe meglio creare una funzione dove li passi il nome file e un vettore e lui ti carica i dati?
  • Re: Esercizio con selection sort

    Sky non posse creare un nuovo vettore, avevo quindi pensato di mettere in ordine i 3 vettori, quindi trovare il minimo di un vettore e confrontarlo con gli altri, dunque passo il minimo nel file, poi vado avanti scorrendo il secondo elemento del vettore e confrontandoli con gli altri due e così via
  • Re: Esercizio con selection sort

    Quello va bene per quello che ti ho messo la procedura del selection sort, per ordinare i vettori. devi poi tenere tre indici e avanzare quello con l'elemento minore. Credo che ti basta una funzione dove ti viene restituito il vettore con l'elemento minore e a quel punto incrementi il suo indice. Tieni presente che la complessità dell'algoritmo é n^3 che non è tra le migliori ma se non puoi creare un altro vettore non ti resta molto da fare.
  • Re: Esercizio con selection sort

    Perfetto, mi sembrava troppo, ma effettivamente sembra l'unica possibilità, per quello che posso fare e conosco,
Devi accedere o registrarti per scrivere nel forum
4 risposte