[C++, Algoritmi] ordinamento vettore con insertion sort
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
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
"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.
hai ragione,grazie!
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.
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.