Buonasera a tutti,
Qualche giorno fa, mi è venuto in mente un modo per ordinare un "array" o chiamato anche "vettore" in un modo diverso dal "Selection sort" o "Bubble sort".
Ci ho pensato mentre a scuola mi spiegavano questi due metodi, ma visto che sto ancora imparando il C++, non so se è già stato inventato questo algoritmo, se fosse così sarò felice lo stesso di aver inventato una cosa già inventata .
Ho fatto vari test, l'algoritmo funziona alla perfezione, e mettendo un contatore nel while nidificato, ho calcolato quante operazioni (ovvero quante volte fa il ciclo di operazioni) impiega per ordinare un vettore di tot numeri, ho anche messo un timer che parte all'inizio dei while e si ferma alla fine, riportando il tempo. E mettendo a confronto i risultati, con un'algoritmo con l'ordinamento di un vettore con i metodi sopra citati, ovviamente utilizzando lo stesso vettore, si può vedere che il mio metodo impiega molto meno operazioni per ordinare il vettore, e impiega anche molto meno tempo.
Ecco a voi il codice :
#include <iostream>
#include <stdio.h>
#include <cstdlib>
using namespace std;
main ()
{int r=0;
do{
system("CLS");
cout<<"---BENVENUTO NEL PROGRAMMA DI ORDINAMENTO CON IL METODO DDA--"<<endl<<endl;
int n;
cout<<"Prego inserisci quanti numeri bisogna ordinare "<<endl;
cin>>n;
while(n<2){
if(n<2){cout<<"Dai sul serio pensi che questo programma sia cosi' stupido da impallarsi ordinando "<<n<<" numeri!?"<<endl<<"Rinserisci (in modo giusto) quanti numeri devi ordinare. "<<endl;
cin>>n;}}
int j=n-1, k=0, i=0, v[n], va=0, max=0, min=0;
int s;
max=j; min=k;
cout<<"Vuoi che i numeri vengano estratti causalmente dal Computer? (S=1/N=2)"<<endl;
cin>>s;
if(s==1)
{cout<<"Vuoi che il margine da rispettare per l'estrazione dei numeri sia casuale o che lo inserisci tu? (Casuale=1/Manuale=2)"<<endl<<"Da 0..................x"<<endl;
cin>>s;
if(s==2){
cout<<"Inserire x = "<<endl;
cin>>va;}else{va=rand()%9999999;
}
cout<<endl;
while(i<n){v[i]=rand()%va;
i++;}
}else{
while(i<n){
cout<<"Inserisci numero ";
cin>>v[i];
i++;
}}
va=0;
i=0;
while(j>k){
while(i<=j){
if(v[i]>v[max]){
max=i;
}else{
if(v[i]<v[min]){
min=i;
}
}
i++;
}
if(max==k&&min==j){
va=v[j];
v[j]=v[k];
v[k]=va;
}else{ if(min==j){
va=v[min];
v[min]=v[k];
v[k]=va;
va=v[max];
v[max]=v[j];
v[j]=va;
}
else{
va=v[max];
v[max]=v[j];
v[j]=va;
va=v[min];
v[min]=v[k];
v[k]=va;
}
}
j--;
k++;
i=k;
max=j;
min=k;
}
i=0;
cout<<endl;
cout<<endl;
cout<<"Prima meta' di "<<n<<" numeri"<<endl<<endl;
if(n%2==0){while(i<n/2){cout<<v[i]<<endl;
i++;}
cout<<endl;
cout<<endl;
system("pause");
cout<<endl;
cout<<endl;
cout<<"Seconda meta' di "<<n<<" numeri"<<endl<<endl;
while(i<n){cout<<v[i]<<endl;
i++;
}
cout<<endl;
cout<<endl;
}else{
n++;
while(i<n/2){
cout<<v[i]<<endl;
i++;
}
cout<<endl;
cout<<endl;
system("pause");
cout<<endl;
cout<<endl;
cout<<"Seconda meta' di "<<n-1<<" numeri"<<endl<<endl;
while(i<n-1){cout<<v[i]<<endl;
i++;
}}
cout<<endl<<"Vuoi ricominciare o chiudere il programma?"<<endl<<"(Ricominciare=1/Chiudere=2) ";
cin>>r;
}while(r!=2);
}