[C++, Algoritmi] ordinamento vettore con insertion sort

lucia88
ciao,
stavo provando a scrivere un programma che ordinasse un array con l'algoritmo insertion sort e l'avevo creato con l'uso delle funzioni..
Il programma non mi dà errori ma quando lo eseguo i risultati sono scorretti... L'ho ricontrollato ma non riesco a vedere l'errore

//ordino un array tramite insertion sort in ordine crescente
#include<iostream>
using namespace std;
typedef float vector[30];
int leggidimensione();
void leggivettore(vector,int);
void ordinavettore(vector,int);
void stampavet(vector,int);
void stampavetord(vector,int);
main(){
	int n; vector a;
	n=leggidimensione();
	leggivettore(a,n);
	stampavet(a,n);
	ordinavettore(a,n);
	stampavetord(a,n);
	return 0;}
	int leggidimensione(){int c;
		do{cout<<"\nDimmi la dimensione del vettore:n=";cin>>c;
		if(c>=30) cout<<"\nATTENZIONE!Il numero deve essere minore di 30!";
		} while(c>=30); return c;}

	void leggivettore(vector a, int n){
		cout<<"\nInserisci le componenti del vettore:"<<endl;
		for(int i=0;i<n;i++){ cout<<"a["<<(i+1)<<"]="; cin>>a[i];} return;}

	void stampavet(vector a, int n){
		cout<<"\nIl vettore e' composto da i seguenti elementi:";
		for(int k=0;k<n;k++) cout<<a[k]<<","; return;	}

	void ordinavettore(vector a, int n){
		//ciclo che seleziona l'indice
		for(int i=1;i<n;i++){
			int j=i;
			//uso while per vedere e nel caso fare tutti i confronti necessari per ordinare
		while((j>0)&&(a[j]<a[j-1])){
			float scambio;
			scambio=a[j];
			a[j]=a[j-1];
			a[j-1]=a[j];
			j--;}}return;}

	void stampavetord(vector a,int n){
		cout<<"\nIl vettore ordinato e' \n:"<<endl;
		for(int i=0;i<n;i++){
			cout<<a[i]<<"\t";} return;}

Risposte
yoshiharu
"Lucia":

	void ordinavettore(vector a, int n){
		//ciclo che seleziona l'indice
		for(int i=1;i<n;i++){
			int j=i;
			//uso while per vedere e nel caso fare tutti i confronti necessari per ordinare
		while((j>0)&&(a[j]<a[j-1])){
			float scambio;
			scambio=a[j];
			a[j]=a[j-1];
			a[j-1]=a[j];
                        ...


Non conosco tanto bene l'insertion sort, ma non e' che qui, invece dell'ultima linea, ci va
a[j-i] = scambio;
? A prescindere dal'algoritmo le ultime due righe non possono essere giuste entrambe, IMHO.

lucia88
hai ragione,grazie!

vict85
Un solo suggerimento: non aver paura di andare a capo. Il tuo codice diventa difficile da leggere se lo compatti come hai fatto tu. Dovresti cercare di mettere una sola istruzione per riga e rendere ben comprensibile dove una parentesi viene aperta o viene chiusa. Non ti dico di seguire un particolare stile (ce ne sono diversi) ma almeno le linee guida comuni.

Il return type del main deve essere int (in C++). Quindi main() senza niente prima è di fatto un codice C++ non conforme lo standard. Al contrario potresti omettere il return in quanto, nel main, return 0 è dato per scontato. Non tutti i compilatori ti fanno storie, ma alcuni si.

Detto questo un codice di questo tipo avrebbe più senso se usasse strutture dinamiche (oppure std::vector). Ma questo non è colpa tua.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.