Einfügen eines Elements in eine sortierte Liste
Ok, ich bin mit getSharedPreferences zu speichern, mein high-score, aber bevor ich es tanken wollte ich Sortieren die Noten in aufsteigender Reihenfolge über das oder-array, aber wenn es feststellt, dass eine Punktzahl, die kleiner als es in der ersten pos-dann wird es nicht überprüfen, der rest ist für die kleinsten?
//function to add score to array and sort it
public void addscoretoarray(int mScore){
for(int pos = 0; pos< score.length; pos++){
if(score[pos] > mScore){
//do nothing
}else {
//Add the score into that position
score[pos] = mScore;
break;
}
}
sortArray(score);
}
soll ich anrufen, sortArray() vor und nach der Schleife um dieses problem zu beheben oder gibt es eine bessere Methode die gleichen Ergebnisse zu erzielen?
Sollte ich auch erwähnen, dass die sortArray(score) - Funktion nur aufrufen Arrays.Sortieren(Partitur)
wo die Partitur ist ein array von mScore
BEARBEITEN:
basierend auf dem, was @Vincent Ramdhanie gepostet habe ich überarbeitet der post:
public void addscoretoarray(int mScore){
int pos = score.length;
//sort the array (in ascending order)
sortArray(score);
//go though the array( in descending order) and check for a place that suits the conditions
while(pos>=0 && score[pos] > mScore){
pos--; //do nothing as score[pos] is larger than mScore
}
//so once a pos is found (e.g. broke out of the while loop)
//check that it is still in the list
if(pos >= 0){
//if it is then move everything down 1 position
for(int i = 0; i < pos; i++){
score[i] = score[i+1];
}
//replace the initial pos with the new score
score[pos] = mScore;
}
}
Ich glaube immer noch, dass es drop-off der Liste, wenn in der for(int i = 0; i < pos; i++){
Schleife.
rufen Sie
sortArray()
vor - Vergleiche starten, und nach, dass Sie überprüfen mit dem größten Eintrag, und rückwärts zu bewegen.danke Cthulhu, aber ich bin jetzt Fragen, es geht zu ersetzen, das kleinste, wie es wird die erste sein, die es erreichen wird, aber es kann mehr als eine Punktzahl, die kleiner ist als Sie, wie würde ich ersetzen, am höchsten Punktzahlen kleiner als Sie?
Sobald Sie sortiert sind, werden Sie wissen, dass diejenigen, die Links von diesem index sind kleiner. Ich sehe nicht das Problem, tut mir Leid.
Ich bin mir nicht sicher, um ehrlich zu sein! haha ich möchte sozusagen mein high-score-array und high scores und ersetzen die meisten relevant, und Stoß sich den rest
InformationsquelleAutor Russell Cargill | 2012-12-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum nicht halten das array der Werte sortiert. Also das add Punktzahl array davon aus, dass das array in absteigender Reihenfolge sortiert wird, die ganze Zeit. Der neue Punktestand eingefügt werden wird, drücken Sie einfach die niedrigste Punktzahl, die aus dem array, wie es eingefügt wird. Sie können dann verwenden Sie eine insert-Algorithmus so etwas wie dieses:
In diesem Fall gibt es keine Notwendigkeit, resort array.
InformationsquelleAutor Vincent Ramdhanie
Wenn ich verstanden Ihr richtig, dann schlage ich vor, diese
Ausgabe
[1, 2, 3, 4, 5, 6]
Beachten Sie, dass es fügt nur einmalige Werte
InformationsquelleAutor Evgeniy Dorofeev
Sehen javadoc zu @return der binarysearch-Methode:
InformationsquelleAutor GKislin
gibt es einige größere bugs im code.
score[pos] = mScore;
in dieser Anweisung weisen Sie
mScore
an positionpos
was zu den gespeicherten Wert anpos
verloren.Wenn Sie ein array verwenden, dann speichern jedes element in zwischen, Sie brauchen, um alle restlichen Elemente 1 position nach rechts, die Sie nicht tun hier.
score[pos] = mScore;
break;
break bricht die Schleife in der ersten iteration selbst, nach dem speichern das element an pos.
Vorschlag :
Verwenden arraylist anstelle der nativen array.
Modifizierte pseudo-code:
InformationsquelleAutor Rahul