Newsgroup: it.comp.java
Titolo: Rotazione indici...

Buongiorno a tutti!
Vi sottopongo il mio 'semplice' problemino:
ho un
vettore con n elementi; supponiamo n = 6. Avremo quindi gli indici degli
elementi:
0
1
2
3
4
5
Ora vorrei ruotare gli indici degli
elementi, o meglio ruotare gli elementi nel vettore. Supponendo di ruotare
di 2 posti, l'elemento che occupa la posizione 0 vorrei che occupasse la
posizione 2 e cosě via:
0-->2
1-->3
2-->4
3-->5
4-->0
5-->1
Qualche suggerimento?!?
Grazie mille e buon lavoro!!!
--------------------------------
Inviato via 
http://usenet.iol.it

Buongiorno a tutti!
Vi sottopongo un problemino.
Ho un vettore con n
elementi.
Supponendo n = 6, gli indici sono:
0
1
2
3
4
5
Ora
vorrei ruotare la posizione degli elementi nel vettore. Supponendo di voler
ruotare di due posizioni, il primo elemento dovrebbe occupare il posto 2,
il secondo il posto 3,. e cosě via:
0-->2
1-->3
2-->4
3-->5
4-->0
5-->1
Qualche suggerimento?!?
Grazie a tutti e buon lavoro!
Fausto.


5-->1
scusa ma non capisco quale sia il problema
crei un array temporaneo, lo riempi e butti via quello vecchio
Object[] s = new Object[6];
for (int i = 0; i < 6; i++)
{
	s[i] = new Object();
}
...
Object[] d = new Object[6];
for (int i = 0; i < 6; i++)
{
	d[(i + 2) % 6] = s[i];
}
s = null;
ciao_O
_______________________________________
http://jame.sourceforge.net
 
[ last release jame4.2e ]
_______________________________________
http://digilander.iol.it/schiele


http://digilander.iol.it/schiele
--------------------------------
Inviato via 
http://usenet.iol.it
 

Ciao e grazie!
non dovresti avere problemi ad usare lo stesso algoritmo con la classe Vector
ciao_O


ciao_O
Grazie mille! Adesso provo....


Riuscito!!! Grazie Andrea.


 writes:
AM> Object[] d = new Object[6];
AM> for (int i = 0; i < 6; i++)
AM> {
AM> 	d[(i + 2) % 6] = s[i];
AM> }
Anni fa  vidi un algoritmo  molto carino che  non aveva bisogno  di un
secondo array e che purtroppo non ho piů :( :( :(.
Poi c'č un'altro  algoritmo, simile al tuo, che  richiede 2 sole cella
ausiliaria ma  č estendibile  a coppie di  buffer esterni  di maggiori
dimensioni laddove questo convenga.
int mcd(int n, int k)
{
   int a;
   do {
      a = n % k;
      n = k;
      a = k; } while(a!=0);
}
// Piů o meno, tradotto al volo da un programma in C dannatamente
// ottimizzato per le CPU SPARC...
//
void kshift(int n, int k, Object[] a)
{
   int mcdNK = mcd(n,k);
   int ringLen;
   Object d1,d2;
   int r9, i, ra, r8;
   ringLen = n / mcdNK;
   ra=0;
   while(mcdNK-- > 0)
   {
       r9 = n - k + ra;
       i = ra;
       ra++;
       d1 = a[i];
       r8 = ringLen;
       i += r9;
       do (
            d2 = a[i] 
            a[i] = d1;
            d1 = d2;
            r9-=k;
            if(r9 < 0) rn+=n;
            i+=r9;
       } while(r8-->0);
       a[r9] = d1;
   }
}
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: 
sa...@eng.it
 ( vedere X-nospam nello header - see X-nospam in header )



che casino ;)


> }
AM> che casino ;)
Beh, dai un'occhio all'originale in 
http://www.gest.unipd.it/~saint/saint6.c
:) :) :)


Beh, dai un'occhio all'originale in 
http://www.gest.unipd.it/~saint/saint6.c
aaaaah!
