Newsgroup: it.comp.java
Titolo: Ordinare elementi..

Salve devo ordinare in maniera decrescente una serie di elementi,
(inizialmente ho provato con un treemap, ma devo ordinarli per valore e
non per chiave..)
gli elementi sono del tipo
1 9.288
2 9.1
3 8.989
4 8.8
5 9.6
6 8.7
7 9.33
8 9.321
9 9.3
10 9.4
Come posso fare?
(faccio notare che per certi valori possono esistere più elementi..)
grazie

 
Cioč hai una lista di valori float che possono non essere univoci e li devi ordinare?
Non hai che l'imbarazzo della scelta, allora.
Puoi utilizzare un BubbleSort, QuickSort, MergeSort, HeapSort, BucketSort (non sono sicuro al 100% del nome di quest'ultimo)
Prova a cercare quello che fa per te.
PSK
-- 

> Puoi utilizzare un BubbleSort, QuickSort, MergeSort, HeapSort, BucketSort (non sono sicuro al 100% del nome di quest'ultimo)
Però io devo ottenere anche la chiave del valore.... funzionano
ugualmente?


Dipende tutto da cosa muovi e dalla funzione di ordinamento.
Iniziamo con il dire che non stai muovendo solo float ma una coppia chiave (che può essere di qualsiasi tipo) e float.
Nell'albero (o nell'array a seconda del metodo di ordinamento che hai scelto) metti solamente le chiavi.
Crei una funzione che data una chiave ne restituisce il "peso" (nel tuo caso il valore del float)
A questo punto quando nell'algoritmo di ordinamento devi fare un confronto, prendi il "peso" dei due elementi e confronti solamente i pesi.
Quando poi scorri la lista ordinata, troverai solamente le chiavi con le quali, però, potrai prendere il valore ad esse associato.
PSK
-- 


Se gli elmenti sono in un array float[] x, puoi usare:
  java.util.Arrays.sort(x);

   java.util.Arrays.sort(x);
si, ma non capisco come dovrei fare per ottenere la chiave associata ai
valori...

 10 9.4
sembrerebbe un normale array di 10 elementi.
Se invece sono delle coppie tipo (int i, float v), le puoi usare
esattamente così e costruirti un apposito Comparator, ma il problema non
mi sembra ben posto perché detto così sembra che tu stia cercando di
ordinare un insieme di elementi X secondo gli elmenti di un insieme Y
non correlato.
Senza sapere nulla della struttura dati che hai non questa relazione non
è evidente.
Ciao.

praticamente gli elementi sono:
1, 2, 3, 4...
e 9.288, 9.1, 8.989, 8.8
sono il valore che questi elementi assumono. (in poche parole gli
elementi sono l'id di alcuni articoli scientifici, e il valore equivale
al rank che questi articoli assumono sul web..)
quindi quello che devo ordinare sono gli elementi (1, 2, 3, 4...) in
base al valore che essi assumono (9.288, 9.1, 8.989, 8.8)...
possibilmente in maniera decrescente...
Grazie


Allora è la mappa che non va bene.
Definisci una:
class Articolo {
  int: id;
  float: rank;
}
mettili in un array o in un altra struttura con il metodo sort() e poi
ordinali:
Articolo[] articoli;
java.util.Arrays.sort(articoli, new Comparator() {
		public int compare(Object o1,
                   Object o2) {
			if (((Articolo)o1).rank > ((Articolo)o2).rank)
				return 1;
			else if (((Articolo)o1).rank < ((Articolo)o2).rank)
				return -1;
			return 0;
		}
	}
);
(Va beh, mancano parecchi controlli...)
Ciao.


Se la chiave è un semplice progressivo, allora ti basta un array (che
ordini con Arrays.sort) o un List che ordini con Collections.sort

Scusa ma sono ancora alle prime armi con java e ci metto un po a
capire...
quindi creo la classe Articolo, diciamo così: (non so se è
esattissima perchè non ho il compilatore in questo momento per
testare..)
class Articolo
	{
	     public static Articolo (String line)
		{
		StringTokenizer stLine = new StringTokenizer (line);
		while (stLine.hasMoreTokens())
		{
			String articolo = stLine.nextTokens();
			String rank = stLine.nextTokens();
		}
		int articoloInt = Integer.parseInt(articolo);
		Double rankDouble = Double.parseDouble(rank);
	     }
	} 
però non ho capito... nell'array ci metto gli articoli che creo?

 perň non ho capito... nell'array ci metto gli articoli che creo?
Se un array č una struttura adeguata per gli altri usi che devi farne, sě.

> Se un array è una struttura adeguata per gli altri usi che devi farne, sì.
Scusami, ma non ci riesco... potresti darmi una mano?
ho creato la classe Articolo come mostrato sopra... però mi da diversi
problemi quando tento di inserire gli elementi nell'array...