публичный рейтинг (String [] имена, float [] баллы) { nameTest = new Cities [names.length]; rankTest = новые города[имена.длина]; город = новые города[имена.длина]; scoreRanks = новый Float[scores.length]; for (int i = 0; i ‹ scores.length - 1; i++) { if (scores[i] == scores[i + 1]) throw new IllegalArgumentException(); } if (names == null || scores == null) throw new NullPointerException(); if (names.length != scores.length) выдать новое исключение IllegalArgumentException();
for (int p = 0; p < scoreRanks.length; p++) {
scoreRanks[p] = scores[p];
}
int[] ranking = new int[names.length];
for (int k = 0; k < ranking.length; k++) {
ranking[this.smallestIndex()] = k + 1;
}
for (int i = 0; i < ranking.length; i++) {
city[i] = new Cities(names[i], ranking[i]);
nameTest[i] = new Cities(names[i], ranking[i]);
rankTest[i] = new Cities(names[i], ranking[i]);
}
Arrays.sort(nameTest, Cities.BY_NAME);
Arrays.sort(rankTest, Cities.BY_RANK);
for (int i = 0; i < names.length - 1; i++) {
if (nameTest[i].getName().equals(nameTest[i + 1].getName())
|| nameTest[i].getName() == null
|| rankTest[i].getRank() == rankTest[i + 1].getRank())
throw new IllegalArgumentException();
}
}
public int smallestIndex() {
float smallest = 0.0f;
int i;
for (i = 0; i < scoreRanks.length; i++) {
if (scoreRanks[i] > 0.0f) {
smallest = scoreRanks[i];
break;
} else
continue;
}
int j = 1;
while (j < scoreRanks.length) {
if (scoreRanks[j] < smallest && scoreRanks[j] != 0.0f) {
smallest = scoreRanks[j];
i = j;
}
j++;
}
scoreRanks[i] = 0.0f;
return i;
}
Это мой конструктор рейтинга. В настоящее время вызов наименьшего индекса () внутри цикла for увеличивает его до времени O (n ^ 2), но мне нужно, чтобы он выполнялся не более чем за время O (n log n).
Что это делает, так это принимает массив результатов и имен. Тогда место с САМЫМ НИЗКИМ счетом будет рангом 1, следующим самым низким будет ранг 2, и так далее, и так далее. Затем я могу создать объекты Cities, где имена[i] соответствуют рейтингу[i].
Надеюсь, это имеет смысл. Купите да, я не понимаю, что я могу сделать, чтобы получить тот же результат, но за время O (n log n). Мой код работает отлично, я думаю, он слишком медленный :(.
Кроме того, будет ли O(2n log n + 5n) сводиться к O(n log n)?
O(2n log + 5n) = O(n logn)
- person Alma Do   schedule 27.02.2014