У меня есть 4 базы данных. Все, содержащие одни и те же члены, имеют оценки из разных совпадений целевой стрельбы. Я хочу определить общее 10 лучших баллов. Затем я добавляю оценки из первой БД в массив, затем добавляю оценки членов из второй БД к массиву (добавляя оценки). И так до последнего. Как мне получить 10 самых больших баллов? Я посмотрел сортировку массивов. Я думаю, что мои решения лежат там.Определите 10 самых больших комнат
ответ
Просто отсортируйте массив, спустившись по счету и верните первые 10 членов. Если вы можете, выполните сортировку уже при выборе из базы данных.
В качестве альтернативы вы можете провести массив из 10 лучших результатов, идя массив через и сравнивая текущее значение с 10 лучшими результатами ..
Вашего двигатель может сделать эту работу наилучшим образом - просто выполнить запрос, как это:
SELECT name, score FROM membertable ORDER BY score DESC LIMIT 10
Если у вас уже есть все данные в массиве, применять Quickselect алгоритм, чтобы получить 10 наилучших значений (без полной сортировки)
Ответная часть ответа очень низкое, потому что (а) игнорирует часть массива Q (b) предполагает, что база данных SQL (c) использует wacky проприетарный синтаксис. Я не понимаю, почему так много голосов ... –
@Free Consulting a) Я предположил одно из наилучшего решения (из algor. POV) для массива b) автор не описал детали базы данных, но он должен знать, принудительное использование БД ошибочно. – MBo
OK вот код, который я использовал:
For I := 0 to iCount -2 do //iCount is length of DB
for J := I+1 to iCount -1 do
if arrScore[I] < arrScore[J] then
begin
T := arrScore[I];
K := arrMember[I];
arrScore[I] := arrScore[J];// arrScore holds member's score
arrMember[I] := arrMember[J];// arrMember holds member's name
arrScore[J] := T;
arrMember[J] := K;
end;
И это работает, благодаря всем вашим ответам.
Я редко спрашиваю об этом так, но что вы пробовали? -1 – kobik
Найдите свой массив для самой большой оценки, используя цикл 'for'. Внутри цикла: 'if arr [I]> s1, тогда начните s1: = arr [I]; s1Index: = I; end; 'Таким образом, в конце цикла' s1' будет самым большим счетом, а 's1Index' - позицией этого балла. Теперь, когда вам нужен второй по величине счет, вы должны сначала удалить самую большую ** (потому что вы не хотите ее снова найти). И затем повторите выше, чтобы найти самый большой. Продолжайте повторять для 's3, s4, ...' и т. Д. _После того, как вы получите соответствующую маркировку для своего творческого и быстрого решения, вы поймете, что вам нужно делать ** нулевое исследование **, прежде чем спрашивать о SO._ –
Да, у меня есть пытался. – Stefan