Use an homegrown insertion sort instead of std::sort()

It is stable and it is also a bit faster then std::sort()
on the tipical small move lists that we need to handle.

Verified to have same functionality of std::stable_sort()

After 999 games at 1+0
Mod vs Orig +240 =534 -225 50.75%  507.0/999  +5 ELO

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba
2009-10-15 13:08:39 +02:00
parent c1ea5ed6f7
commit 4dd7fccfd1
2 changed files with 26 additions and 7 deletions

View File

@@ -23,7 +23,6 @@
//// Includes
////
#include <algorithm>
#include <cassert>
#include "history.h"
@@ -123,7 +122,7 @@ void MovePicker::go_next_phase() {
case PH_GOOD_CAPTURES:
lastMove = generate_captures(pos, moves);
score_captures();
std::sort(moves, lastMove);
sort_moves(moves, lastMove);
return;
case PH_KILLERS:
@@ -134,7 +133,7 @@ void MovePicker::go_next_phase() {
case PH_NONCAPTURES:
lastMove = generate_noncaptures(pos, moves);
score_noncaptures();
std::sort(moves, lastMove);
sort_moves(moves, lastMove);
return;
case PH_BAD_CAPTURES:
@@ -142,20 +141,20 @@ void MovePicker::go_next_phase() {
// to get SEE move ordering.
curMove = badCaptures;
lastMove = lastBadCapture;
std::sort(badCaptures, lastMove);
sort_moves(badCaptures, lastMove);
return;
case PH_EVASIONS:
assert(pos.is_check());
lastMove = generate_evasions(pos, moves, pinned);
score_evasions();
std::sort(moves, lastMove);
sort_moves(moves, lastMove);
return;
case PH_QCAPTURES:
lastMove = generate_captures(pos, moves);
score_captures();
std::sort(moves, lastMove);
sort_moves(moves, lastMove);
return;
case PH_QCHECKS: