[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.