Определите 10 самых больших номеров

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

delphi,

-5

Ответов: 3


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

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

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


0

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

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


0

Хорошо, вот код, который я использовал:

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;

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

Дельфы,
Похожие вопросы