2016-10-16 4 views
-5

У меня есть 4 базы данных. Все, содержащие одни и те же члены, имеют оценки из разных совпадений целевой стрельбы. Я хочу определить общее 10 лучших баллов. Затем я добавляю оценки из первой БД в массив, затем добавляю оценки членов из второй БД к массиву (добавляя оценки). И так до последнего. Как мне получить 10 самых больших баллов? Я посмотрел сортировку массивов. Я думаю, что мои решения лежат там.Определите 10 самых больших комнат

+4

Я редко спрашиваю об этом так, но что вы пробовали? -1 – kobik

+1

Найдите свой массив для самой большой оценки, используя цикл 'for'. Внутри цикла: 'if arr [I]> s1, тогда начните s1: = arr [I]; s1Index: = I; end; 'Таким образом, в конце цикла' s1' будет самым большим счетом, а 's1Index' - позицией этого балла. Теперь, когда вам нужен второй по величине счет, вы должны сначала удалить самую большую ** (потому что вы не хотите ее снова найти). И затем повторите выше, чтобы найти самый большой. Продолжайте повторять для 's3, s4, ...' и т. Д. _После того, как вы получите соответствующую маркировку для своего творческого и быстрого решения, вы поймете, что вам нужно делать ** нулевое исследование **, прежде чем спрашивать о SO._ –

+0

Да, у меня есть пытался. – Stefan

ответ

0

Просто отсортируйте массив, спустившись по счету и верните первые 10 членов. Если вы можете, выполните сортировку уже при выборе из базы данных.

В качестве альтернативы вы можете провести массив из 10 лучших результатов, идя массив через и сравнивая текущее значение с 10 лучшими результатами ..

+0

Как отсортировать массив? – Stefan

+2

@Stefan Вы спрашивали Google? – Nat

5

Вашего двигатель может сделать эту работу наилучшим образом - просто выполнить запрос, как это:

SELECT name, score FROM membertable ORDER BY score DESC LIMIT 10 

Если у вас уже есть все данные в массиве, применять Quickselect алгоритм, чтобы получить 10 наилучших значений (без полной сортировки)

+0

Ответная часть ответа очень низкое, потому что (а) игнорирует часть массива Q (b) предполагает, что база данных SQL (c) использует wacky проприетарный синтаксис. Я не понимаю, почему так много голосов ... –

+0

@Free Consulting a) Я предположил одно из наилучшего решения (из algor. POV) для массива b) автор не описал детали базы данных, но он должен знать, принудительное использование БД ошибочно. – MBo

0

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; 

И это работает, благодаря всем вашим ответам.