Newsgroup: it.comp.lang.c++
Titolo: suggerimento.

ciao a tutti.
come già postato ho inizito lo studio di algoritmi pochi giorni fa.
mi servirebbe un suggerimento su come poter implementare in C++ (riga di 
comando)
una applicazione che illustri graficamente l'andamento dell'ordinamento di 
un buffer con bubblesort.
una cosa del tipo --> 
http://en.wikipedia.org/wiki/Image:Bubble_sort_animation.gif
avevo pensato ad organizzare un array bidimensionale con valori random che 
dovrebbero avere una distanza proporzionale al loro valore rispetto alla 
diagonale del rettangolo...(?) sono confuso..chi ha un idea.. 


Dovrebbe bastare un array unidimensionale di interi. Dimensione array
== numero elemnti da ordinare. Effettuare ordinamento sui elementi,
poi plotting semplice X-Y dei valori.
Saluti.

 wrote:

A occhio l'animazione di wikipedia considera un array di dimensione n
con dentro gli interi da 0 a n-1. Parte con i valori disposti in modo
causale ed inizia l'algoritmo plottando ad ogni passo i punti [valore,
indice nell'array].
Buon lavoro!
Nicola


Trovo confondente che la parola "dimensione" è spesso usata sia per il
"rank" che per la larghezza dell'array.
Saluti.

 diagonale del rettangolo...(?) sono confuso..chi ha un idea..
Ho preso una vecchia versione di bubble sort che avevo scritto tempo fa e ho 
aggiunto 2 funzioni:
#include <iostream>
const int index = 10;
int vettore [index];
int n = 0;
int indice = index - 1;
// Una rudimentale clear screen che serve solo a fare un po' di pulizia tra 
un output e l'altro.
void cls() {
     for (int i = 0; i < 30; i++)
         std::cout << std::endl;
};
// Questa funzione blocca l'esecuzione per n secondi, serve per rendere 
l'idea dello spostamento
void delay(int n) {
    time_t t;
    time(&t);
    int i;
    for (int j = 0; j < n; j++) {
        i = ctime(&t)[18] - 48;
        while (i == ctime(&t)[18] - 48)
              time(&t);
    };
};
// Questa invece stampa tanti asterischi quanto e' il numero contenuto in 
una certa posizione dell'array.
void stampa(int n) {
     for (int i = 0; i < n; i++)
         std::cout << "*";
     std::cout << " " << n << std::endl;
};
void scambia (int& a, int& b) {
int c = 0;
        c = a;
        a = b;
        b = c;
};
void bubblesort (int vet [index]) {
bool scambio = false;
        do {
           scambio = false;
                   for (int i = 0; i < indice; i++)
                       if (vet[i] > vet[i + 1]) {
                           scambia (vet[i], vet[i + 1]);
                           scambio = true;
                           delay(1);
                           cls();
                           for (int j = 0; j < index; j++)
                               stampa(vettore[j]);
                       };
                       indice--;
        }
        while (scambio);
};
int main () {
        time_t t;
        time(&t);
        srand (ctime(&t)[18] - 48); // Come seme per il generatore uso i 
secondi (in questo caso solo l'unità senza decina).
        for (int j = 0; j < index; j++)
                vettore[n++] = rand() % 50 + 1; // Genero numeri casuali da 
1 a 50
        bubblesort (vettore);
        while(std::cin.get() != '\n');
        return 0;
}
Non so se possa fare al caso tuo, spero di si :-)
Saluti 

 wrote in message 
news:472d02b0$0$36449$4faf...@reader5.news.tin.it...
